各位大佬,请问如何使用 gorm 保存切片,下面是我出错的代码
type Node struct {
ID int `json:"id"`
Name string `json:"name"`
Author string `json:"author"`
IP []string `json:"ip"`
}
ips:=[]string{"1.1.1.1","2.2.2.2","3.3.3.3"}
body := Node{Name: "testName", Author: "testAuthor", Node: ips}
if err := DB.Create(&body).Error; err != nil {
return false
}
unsupported data type: &[]
我想存入数据库的数据形式是:
"1.1.1.1","2.2.2.2","3.3.3.3"
前端发来的数据,只能是一个数组包含着 ip,还不能改。。。 这种情况下,问下大佬们我该咋整 T_T
1
zgw0 2020-09-11 11:06:25 +08:00 1
我之前的做法是转了字符串存起来,然后用的时候再转回数组
|
2
z0wjqnxi 2020-09-11 11:17:26 +08:00 1
``` golang
type Node struct { ... IPList ipList `json:"ip" binding:”gt=0,dive,ipv4“ ` } type ipList []string // gorm 自定义结构需要实现 Value Scan 两个方法 // Value 实现方法 func (p ipList ) Value() (driver.Value, error) { return json.Marshal(p) } // Scan 实现方法 func (p *ipList ) Scan(data interface{}) error { return json.Unmarshal(data.([]byte), &p) } 自定义结构我是这么实现的 |
3
richzhu OP |
4
richzhu OP sql: Scan error on column index 5, name "node": invalid character '.' after top-level value;
@z0wjqnxi 大佬好,使用这个方法之后,不知道为什么,不能读了,读取数据的时候,报上面这个错误 |
6
Yoock 2020-09-11 12:54:02 +08:00 via iPhone
AfterFind hook
|
7
cszchen 2020-09-12 07:51:44 +08:00 via Android
用 postgres.jsonb 类型
|
8
reus 2020-09-12 14:34:44 +08:00
要对 ip 做查询做索引时你就知错
应该另外建表,存成多行 |
9
adrianduan 2020-09-12 21:00:58 +08:00
不知道你用的是 gorm V1 还是 V2,如果使用的 PostgreSQL 且版本为 V1 的话可以直接定义类型为 pq.StringArray,V2 好像改了 PostgreSQL 的 driver 从 pq 到 pgx,这种写法就不行了
|