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 关注
- 169 浏览
添加回答
举报