Saya memiliki yang berikut ini:
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"`
}
Ketika saya mencoba db.Save(buffer), saya mendapatkan kesalahan berikut:
sql: converting Exec argument #1's type: unsupported type BufferType, a string)
Apakah mungkin untuk menyelesaikan bahwa BufferType benar-benar hanya sebuah string, dan simpan? Saya mendapatkan kesalahan serupa jika saya mencoba dan memuat struct ini dengan db.Find()
Setelah beberapa debugging lagi, kesalahan ini tampaknya keluar dari database golang/kode sql, dan saya menemukan solusi di sini . Saya hanya perlu menambahkan:
func (u *BufferType) Scan(value interface{}) error { *u = BufferType(value.(string)); return nil }
func (u BufferType) Value() (driver.Value, error) { return string(u), nil }
Agak kikuk, tetapi membantu database mengetahui cara memetakan dengan benar. Saya juga dapat menambahkan pemeriksaan kesalahan di sini jika saya membutuhkannya.
Saya memiliki masalah yang sama. Solusi @bramp masih memberi saya kesalahan. Berikut ini bekerja untuk saya:
func (u *BufferType) Scan(value interface{}) error { *u = BufferType(value.([]byte)); return nil }
func (u BufferType) Value() (driver.Value, error) { return string(u), nil }
Perbedaannya adalah menggunakan []byte
alih-alih string
. Utas stackoverflow ini membantu saya: http://stackoverflow.com/a/20582504/2418739
+1 solusi hebat. Saya berharap ini ada di dokumen GORM.
Komentar yang paling membantu
Saya memiliki masalah yang sama. Solusi @bramp masih memberi saya kesalahan. Berikut ini bekerja untuk saya:
Perbedaannya adalah menggunakan
[]byte
alih-alihstring
. Utas stackoverflow ini membantu saya: http://stackoverflow.com/a/20582504/2418739