【发布时间】:2017-12-05 11:53:57
【问题描述】:
我有以下功能:
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 在这种情况下是一个 gob 编码的Account)
acc := &Account{}
err := bytesToData(acc, b)
但是当我这样做时,我会收到类似Cannot use *Account for type *interface{} 的错误。
目前,我刚刚将其改回interface{}。但是,如果我直接传入 Account 或其他类型而不将其设为指针,gob 会引发错误。似乎这应该在编译时进行检查。既然interface{} 类型的参数可以接受任何东西,为什么*interface{} 类型的参数不接受指向任何东西的指针?
【问题讨论】:
标签: pointers go typechecking