5 回答

TA貢獻1775條經驗 獲得超11個贊
可以通過將檢查標志設置為 false 來停止警告。
$ go doc cmd/vet
默認情況下執行所有檢查。如果任何標志顯式設置為 true,則僅運行那些測試。相反,如果任何標志明確設置為 false,則僅禁用那些測試。因此 -printf=true 運行 printf 檢查,-printf=false 運行除 printf 檢查之外的所有檢查。
Unkeyed composite literals
Flag: -composites
Composite struct literals that do not use the field-keyed syntax.
但是警告是由于在primitive.E結構中設置值時沒有提供鍵名。
為primitive.E結構設置鍵將刪除警告消息。例如
filter := bson.D{primitive.E{Key: "autorefid", Value: "100"}}
包原語包含類似于 Go 原語的類型,因為 BSON 類型不能有直接的 Go 原語表示。
type E struct {
? ? Key? ?string
? ? Value interface{}
}
E 表示 D 的 BSON 元素。它通常在 D 內部使用。

TA貢獻1826條經驗 獲得超6個贊
由于沒有其他人指出這一點——警告是為了保護您免受第三方 API 的更改悄無聲息地破壞您的代碼。
忽略此警告有可能導致非常討厭且難以追蹤運行時錯誤,因此如果您始終明確指定 3rd party 的鍵,vet
您會更好。struct
struct
如果您正在使用的庫的維護者出于某種原因決定更改其元素的順序,就會出現這種情況。例如,在 OP 的情況下Key
用, 切換。Value
您的代碼似乎仍然可以正常編譯,但是您打算作為鍵的內容現在將作為值傳遞,反之亦然,并且事情會以意想不到的方式開始中斷。

TA貢獻1825條經驗 獲得超6個贊
您可以簡單地更改:
filter := bson.D{{"autorefid", "100"}}
到:
filter := bson.D{{Key: "autorefid", Value: "100"}}
//跳過 primitive.E 正如 Chris W 所說

TA貢獻1818條經驗 獲得超3個贊
你可以改變:
filter := bson.D{{"autorefid", "100"}}
到:
filter := bson.D{primitive.E{Key: "autorefid", Value: "100"}}

TA貢獻1752條經驗 獲得超4個贊
實際上,如果不需要 BSON 文檔的有序表示,您可以通過簡單地更改將 BSON 文檔更改為無序表示
filter?:=?bson.D{{"autorefid",?"100"}}
到
filter?:=?bson.M{"autorefid":?"100"}
MongoDB 服務器足夠聰明,可以找到匹配的索引,而不管使用的順序如何。bson.D
bson.M
- 5 回答
- 0 關注
- 244 瀏覽
添加回答
舉報