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()
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.
Commentaire le plus utile
J'ai eu le même problème. La solution de @bramp m'a
La différence est d'utiliser
[]byte
au lieu destring
. Ce fil stackoverflow m'a aidé: http://stackoverflow.com/a/20582504/2418739