如何在Golang结构中将字符串转换为切片



我需要将结构中的一个字符串类型字段转换为切片。

我正在使用GORM进行查询。有问题的字段以JSON类型存储在MySQL中。

以下是一个存储在其中一个DB记录中的JSON示例:

[“tag1”, “tag2”, “tag3”]

我在果朗的结构体:

type Mystruct struct {
Id int
Name string
Desc string
Tags string // this is problem
}

我生成这样的结构:

mystruct := []Mystruct{}
db.Find(&mystruct)

一切都很好,除了我希望"标签"是一个切片,而不是字符串。如果我使用,GORM会抛出错误

Tags []string

我也试过做

Tags datatypes.JSON

包含在GORM中,但只返回字节。

我主要想访问html模板中的标签并在其中循环。

感谢您的帮助。非常感谢。

如果希望db.Find(&mystruct)执行解组,则必须使用实现Scanner接口的自定义类型。

例如

type StringSlice []string
func (ss *StringSlice) Scan(src interface{}) error {
switch data := src.(type) {
case []byte:
return json.Unmarshal(data, ss)
case string:
return json.Unmarshal([]byte(data), ss)
}
return nil // or an error
}

然后更新你的类型

type Mystruct struct {
Id   int
Name string
Desc string
Tags StringSlice
}

如果您将Mystruct用于INSERTUPDATE,那么您还必须实现Valuer接口,否则保存这样的实例可能会中断。

func (ss StringSlice) Value() (driver.Value, error) {
return json.Marshal(ss)
}

最新更新