0

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.

Zap
  • 859
  • 1
  • 7
  • 10

1 Answers1

3

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

Sean
  • 1,785
  • 10
  • 15