我有以下功能:为什么我不能使用指向* interface {}的特定类型的指针?
func bytesToData(data interface{}, b []byte) error {
buf := bytes.NewBuffer(b)
dec := gob.NewDecoder(buf)
return dec.Decode(data)
}
我用这个进出boltdb的获得结构数据。我想要做的,就是改变这种签名:
func bytesToData(data *interface{}, b []byte) error
然后,我希望能够这样称呼它(b
在这种情况下是采空区编码Account
)
acc := &Account{}
err := bytesToData(acc, b)
但是当我这样做,我得到一个错误,如Cannot use *Account for type *interface{}
。
现在,我刚刚将其更改回interface{}
。但是,如果我直接传入Account
或其他某种类型而不使其成为指针,则gob会抛出错误。这似乎应该在编译时检查。并且假设类型为interface{}
的参数接受任何内容,为什么*interface{}
类型的参数不接受指向任何内容的指针?
爱上Haskell/C对比的极端。 –