Имею следующее:
type BufferType string
const (
Console BufferType = "console"
Channel BufferType = "channel"
Conversation BufferType = "conversation"
)
type Buffer struct {
Bid int64 `gorm:"primary_key:yes"`
Type BufferType `sql:"not null;type:ENUM('console', 'channel', 'conversation')"`
Name string `sql:"size:255;not null"`
}
Когда я пробую db.Save (буфер), я получаю следующую ошибку:
sql: converting Exec argument #1's type: unsupported type BufferType, a string)
Можно ли решить, что BufferType действительно просто строка, и сохранить? Я получаю аналогичные ошибки, если пытаюсь загрузить эту структуру с помощью db.Find ()
После некоторого более отладки, эта ошибка , кажется, выходит из базы данных golang / SQL кода, и я нашел решение здесь . Мне просто нужно было добавить:
func (u *BufferType) Scan(value interface{}) error { *u = BufferType(value.(string)); return nil }
func (u BufferType) Value() (driver.Value, error) { return string(u), nil }
Это немного неуклюже, но помогает базе данных правильно отображать. Я мог бы также добавить сюда проверку ошибок, если бы мне это было нужно.
Я была такая же проблема. Решение @bramp по- прежнему дало мне ошибку. Для меня сработало следующее:
func (u *BufferType) Scan(value interface{}) error { *u = BufferType(value.([]byte)); return nil }
func (u BufferType) Value() (driver.Value, error) { return string(u), nil }
Разница в использовании []byte
вместо string
. Этот поток stackoverflow помог мне: http://stackoverflow.com/a/20582504/2418739
+1 отличное решение. Я бы хотел, чтобы это было в документации GORM.
Самый полезный комментарий
Я была такая же проблема. Решение @bramp по- прежнему дало мне ошибку. Для меня сработало следующее:
Разница в использовании
[]byte
вместоstring
. Этот поток stackoverflow помог мне: http://stackoverflow.com/a/20582504/2418739