英文:
Go/Mgo -> []byte in MongoDB, slice of unaddressable array
问题
我在尝试使用mgo将sha256哈希添加到MongoDB时遇到了一个错误:reflect.Value.Slice: slice of unaddressable array。其他[]bytes正常工作。
hash := sha256.Sum256(data)
err := c.Col.Insert(bson.M{"id": hash})
你有什么想法,可能是什么问题呢?我知道我可以将哈希编码为字符串,但这应该是不必要的。
英文:
I'm getting a:
>reflect.Value.Slice: slice of unaddressable array
Error when I'm trying to add a sha256 hash to a mongoDB with mgo. Other []bytes work fine.
hash := sha256.Sum256(data)
err := c.Col.Insert(bson.M{"id": hash})
Any idea what the problem might be? I know I could encode the hash as a string but that should not be necessary.
答案1
得分: 3
这个错误意味着bson将hash当作[]byte
处理,但实际上它是[32]byte
。后者是一个数组值,数组值不能使用reflect包进行切片。
修复方法很简单,给bson传递hash
的切片:
err := c.Col.Insert(bson.M{"id": hash[:]})
Go语言的作者之一Ian Lance Taylor在这里解释了这个问题:
https://groups.google.com/d/msg/golang-nuts/ps0XdkIffQA/gekY8N0twBgJ
英文:
That error means bson is treating hash as a []byte
, but it is actually a [32]byte
. The latter is an array value, and array values can't be sliced using the reflect package.
The fix is simple; give bson a slice of hash
instead:
err := c.Col.Insert(bson.M{"id": hash[:]})
Ian Lance Taylor, one of the Go authors, explains this here:
https://groups.google.com/d/msg/golang-nuts/ps0XdkIffQA/gekY8N0twBgJ
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论