因此,我有以下两种方法:
func Marshal(in interface{}) (out []byte, err error)
func readDocument(r io.Reader) ([]byte, error)
在我的代码中,我执行以下操作:
queryDoc, err := readDocument(client) // querydoc is slice of len 408
if something {
queryDoc, err := bson.Marshal(something)
newDocLen := len(queryDoc) // len is now 200
}
len(queryDoc) // len is 408????
由于某些原因,queryDoc无法通过解组得到更新。但是,如果我将其分配给一个中间值,它将起作用:
queryDoc, err := readDocument(client) // querydoc is slice of len 408
if something {
q, err := bson.Marshal(something)
queryDoc = q
newDocLen := len(queryDoc) // len is now 200
}
len(queryDoc) // len is 200
因为在第一个示例中我将返回值分配给queryDoc,所以变量queryDoc现在不应该引用新数组吗?
在
queryDoc, err := bson.Marshal(something)
您实际上创建了一个新的queryDoc
,:=
而不是=
。编译器未捕获它,因为您也已使用它。替换为
var err error
queryDoc, err = bson.Marshal(something)
它应该按预期工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句