Gorm: Problème de types énumérés

Créé le 26 nov. 2014  ·  3Commentaires  ·  Source: go-gorm/gorm

J'ai ce qui suit :

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

Lorsque j'essaie db.Save(buffer), j'obtiens l'erreur suivante :
sql: converting Exec argument #1's type: unsupported type BufferType, a string)

Serait-il possible de résoudre que BufferType n'est en réalité qu'une chaîne et de sauvegarder ? J'obtiens des erreurs similaires si j'essaie de charger cette structure avec db.Find()

Commentaire le plus utile

J'ai eu le même problème. La solution de @bramp m'a

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

La différence est d'utiliser []byte au lieu de string . Ce fil stackoverflow m'a aidé: http://stackoverflow.com/a/20582504/2418739

Tous les 3 commentaires

Après un peu plus de débogage, cette erreur semble provenir du code base de données/sql de golang, et j'ai trouvé une solution ici . J'avais juste besoin d'ajouter :

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

C'est un peu maladroit, mais cela aide la base de données à savoir comment mapper correctement. Je pourrais également ajouter la vérification des erreurs ici si j'en avais besoin.

J'ai eu le même problème. La solution de @bramp m'a

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

La différence est d'utiliser []byte au lieu de string . Ce fil stackoverflow m'a aidé: http://stackoverflow.com/a/20582504/2418739

+1 excellente solution. J'aurais aimé que ce soit dans la doc de GORM.

Cette page vous a été utile?
0 / 5 - 0 notes