亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

復合文字使用非鍵控字段

復合文字使用非鍵控字段

Go
大話西游666 2023-06-05 17:24:36
我正在為 golang 使用新的官方 mongodb 驅動程序。我創建了一個復雜的查詢來將數據插入 mongo db,然后根據元素值對其進行排序。我正在使用一個過濾器,我在其中創建了 bson 類型:-filter := bson.D{{"autorefid", "100"}}但它顯示警告說:primitive.E 復合字面量使用非鍵控字段這些警告在我的代碼中造成了混亂。
查看完整描述

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 內部使用。


查看完整回答
反對 回復 2023-06-05
?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

由于沒有其他人指出這一點——警告是為了保護您免受第三方 API 的更改悄無聲息地破壞您的代碼。

忽略此警告有可能導致非常討厭且難以追蹤運行時錯誤,因此如果您始終明確指定 3rd party 的鍵,vet您會更好。struct

struct如果您正在使用的庫的維護者出于某種原因決定更改其元素的順序,就會出現這種情況。例如,在 OP 的情況下Key用, 切換。Value您的代碼似乎仍然可以正常編譯,但是您打算作為鍵的內容現在將作為值傳遞,反之亦然,并且事情會以意想不到的方式開始中斷。


查看完整回答
反對 回復 2023-06-05
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

您可以簡單地更改:

filter := bson.D{{"autorefid", "100"}}

到:

filter := bson.D{{Key: "autorefid", Value: "100"}}

//跳過 primitive.E 正如 Chris W 所說


查看完整回答
反對 回復 2023-06-05
?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

你可以改變:

filter := bson.D{{"autorefid", "100"}}

到:

filter := bson.D{primitive.E{Key: "autorefid", Value: "100"}}


查看完整回答
反對 回復 2023-06-05
?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

實際上,如果不需要 BSON 文檔的有序表示,您可以通過簡單地更改將 BSON 文檔更改為無序表示

filter?:=?bson.D{{"autorefid",?"100"}}

filter?:=?bson.M{"autorefid":?"100"}

MongoDB 服務器足夠聰明,可以找到匹配的索引,而不管使用的順序如何。bson.Dbson.M


查看完整回答
反對 回復 2023-06-05
  • 5 回答
  • 0 關注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號