5 回答

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

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

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以簡(jiǎn)單地更改:
filter := bson.D{{"autorefid", "100"}}
到:
filter := bson.D{{Key: "autorefid", Value: "100"}}
//跳過(guò) primitive.E 正如 Chris W 所說(shuō)

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
你可以改變:
filter := bson.D{{"autorefid", "100"}}
到:
filter := bson.D{primitive.E{Key: "autorefid", Value: "100"}}

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
實(shí)際上,如果不需要 BSON 文檔的有序表示,您可以通過(guò)簡(jiǎn)單地更改將 BSON 文檔更改為無(wú)序表示
filter?:=?bson.D{{"autorefid",?"100"}}
到
filter?:=?bson.M{"autorefid":?"100"}
MongoDB 服務(wù)器足夠聰明,可以找到匹配的索引,而不管使用的順序如何。bson.D
bson.M
- 5 回答
- 0 關(guān)注
- 240 瀏覽
添加回答
舉報(bào)