Gorm: Проблема с перечисляемыми типами

Созданный на 26 нояб. 2014  ·  3Комментарии  ·  Источник: go-gorm/gorm

Имею следующее:

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 ()

Самый полезный комментарий

Я была такая же проблема. Решение @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

Все 3 Комментарий

После некоторого более отладки, эта ошибка , кажется, выходит из базы данных 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.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги