这是一种愚蠢的语法错误,尝试了很多方法,只是无法让它工作,有人请求帮助。
带有mgo
的Go中的MongoDB,我只是试图简化使用$ne
运算符,代码如下,但不断出现编译语法错误:
line 15: convIter := Session.Copy().DB("").C("convs").Find(bson.M {
line 16: "conversationStatus": interface{} {
line 17: bson.M {
line 18: "$ne": "DESTROYED"
line 19: },
line 20: },
line 21: }).Iter()
尝试在任何地方添加逗号,
删除逗号,只是无法使其工作,总是遇到如下编译语法错误:
mongodb/query.go:16: syntax error: unexpected {, expecting comma or }
mongodb/query.go:20: syntax error: unexpected }, expecting expression
mongodb/query.go:21: syntax error: unexpected }, expecting expression
答案 0 :(得分:5)
bson.M
是地图类型,因此bson.M{ ... }
是map literal。如果键值对以多行写入,则每个键都必须以逗号结尾。有关详细信息,请参阅How to break a long line of code in Golang?
也没有"界面"字面意思,放弃。值interface{}
类型可以保存/包装任何值,包括bson.M
值。并且interface{}
值创建是自动的,您甚至不需要类型conversion。
正确的语法:
convIter := Session.Copy().DB("").C("convs").Find(bson.M{
"conversationStatus": bson.M{
"$ne": "DESTROYED",
},
}).Iter()
同样,如果使用bson.D
类型(它是一个切片),不以文字结束括号结尾的行必须以逗号结尾,例如:
d := bson.D{
{Name: "fieldA", Value: 1},
{Name: "fieldB", Value: "running"},
}