Golang中的变量赋值

时间:2014-11-11 14:06:03

标签: go

所以我有以下两种方法:

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现在不应该引用新数组吗?

1 个答案:

答案 0 :(得分:4)

queryDoc, err := bson.Marshal(something)

您确实使用queryDoc而不是:=创建了新的=。编译器没有捕获它,因为你也使用过它。用

替换它
var err error
queryDoc, err = bson.Marshal(something)

它应该按预期工作。