猿问

Golang中的变量赋值

所以我有以下两种方法:


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


一只名叫tom的猫
浏览 211回答 1
1回答

慕尼黑5688855

在queryDoc, err := bson.Marshal(something)你实际上创建了一个新queryDoc的:=而不是=. 编译器没有捕获它,因为您也使用了它。将其替换为var err errorqueryDoc, err = bson.Marshal(something)它应该按预期工作。
随时随地看视频慕课网APP

相关分类

Go
我要回答