Go/Mgo -> []byte在MongoDB中,是不可寻址数组的切片。

huangapple go评论94阅读模式
英文:

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

huangapple
  • 本文由 发表于 2014年4月5日 23:03:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/22882564.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定