لدي ما يلي:
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 ()
بعد المزيد من التصحيح ، يبدو أن هذا الخطأ يخرج من كود SQL / قاعدة بيانات golang ، ووجدت حلاً هنا . أنا فقط بحاجة لإضافة:
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.
التعليق الأكثر فائدة
كان لي نفس القضية. لا يزال حل bramp يعطيني خطأ. عملت ما يلي بالنسبة لي:
الفرق هو استخدام
[]byte
بدلاً منstring
. ساعدني مؤشر ترابط stackoverflow: http://stackoverflow.com/a/20582504/2418739