Gorm: Problema de tipos enumerados

Criado em 26 nov. 2014  ·  3Comentários  ·  Fonte: go-gorm/gorm

Eu tenho o seguinte:

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"`
}

Quando tento db.Save (buffer), recebo o seguinte erro:
sql: converting Exec argument #1's type: unsupported type BufferType, a string)

Seria possível resolver que BufferType é realmente apenas uma string e salvar? Recebo erros semelhantes se tento carregar esta estrutura com db.Find ()

Comentários muito úteis

Eu tive o mesmo problema. A solução do @bramp ainda me deu um erro. O seguinte funcionou para mim:

func (u *BufferType) Scan(value interface{}) error { *u = BufferType(value.([]byte)); return nil }
func (u BufferType) Value() (driver.Value, error)  { return string(u), nil }

A diferença é usar []byte vez de string . Este thread stackoverflow me ajudou: http://stackoverflow.com/a/20582504/2418739

Todos 3 comentários

Depois de mais alguma depuração, esse erro parece estar saindo do código do banco de dados / sql golang, e eu encontrei uma solução aqui . Eu só precisava adicionar:

func (u *BufferType) Scan(value interface{}) error { *u = BufferType(value.(string)); return nil }
func (u BufferType) Value() (driver.Value, error)  { return string(u), nil }

É um pouco desajeitado, mas ajuda o banco de dados a saber como mapear corretamente. Eu também poderia adicionar verificação de erro aqui, se necessário.

Eu tive o mesmo problema. A solução do @bramp ainda me deu um erro. O seguinte funcionou para mim:

func (u *BufferType) Scan(value interface{}) error { *u = BufferType(value.([]byte)); return nil }
func (u BufferType) Value() (driver.Value, error)  { return string(u), nil }

A diferença é usar []byte vez de string . Este thread stackoverflow me ajudou: http://stackoverflow.com/a/20582504/2418739

+1 ótima solução. Eu gostaria que isso estivesse nos documentos do GORM.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Ganitzsh picture Ganitzsh  ·  3Comentários

hypertornado picture hypertornado  ·  3Comentários

leebrooks0 picture leebrooks0  ·  3Comentários

izouxv picture izouxv  ·  3Comentários

satb picture satb  ·  3Comentários