У меня есть следующая функция:
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
в кодировке gob)
acc := &Account{}
err := bytesToData(acc, b)
Но когда я это делаю, я получаю сообщение об ошибке типа Cannot use *Account for type *interface{}
.
На данный момент я только что изменил его обратно на interface{}
. Но затем, если я передам Account
или какой-либо другой тип напрямую, не делая его указателем, gob выдаст ошибку. Кажется, это должно быть проверено во время компиляции. А учитывая, что аргумент типа interface{}
принимает что угодно, почему аргумент типа *interface{}
не принимает указатель ни на что?