我试图为postgres数据库创建GORM模型,其中包含带有自定义ScannerValuer的类型,该类型将字符串 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/

10-15 23:12
查看更多