我试图为postgres数据库创建GORM模型,其中包含带有自定义Scanner
和Valuer
的类型,该类型将字符串 slice 与字符串进行来回转换,以保存为单个数据库列。如果 slice 为空或为零,则我希望数据库列也为零(与空字符串相对)。
type MultiString []string
func (s *MultiString) Scan(src interface{}) error {
str, ok := src.(string)
if !ok {
return errors.New("failed to scan multistring field - source is not a string")
}
*s = strings.Split(str, ",")
return nil
}
func (s MultiString) Value() (driver.Value, error) {
if s == nil || len(s) == 0 {
return nil, nil
}
return strings.Join(s, ","), nil
}
当我尝试在以下结构上调用AutoMigrate
时出现问题:type Person struct {
ID int
Name string
Kids *MultiString
}
我多次收到以下错误:[error] unsupported data type: &[]
最佳答案
在Value
方法中,将返回的nil
替换为sql.NullString{}
:
func (s MultiString) Value() (driver.Value, error) {
if s == nil || len(s) == 0 {
return sql.NullString{}, nil
}
return strings.Join(s, ","), nil
}
关于postgresql - 不受支持的数据类型:GORM字段上的&[]错误,自定义评估工具返回nil?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64035165/