我有以下功能:爲什麼我不能使用指向* 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對比的極端。 –