跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • gorm 如何存数组
未分類
13 9 月 2020

gorm 如何存数组

gorm 如何存数组

資深大佬 : richzhu 11

各位大佬,请问如何使用 gorm 保存切片,下面是我出错的代码

结构体

type Node struct {  ID     int    `json:"id"`  Name   string `json:"name"`  Author string `json:"author"`  IP   []string `json:"ip"` } 

Gorm 保存

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

大佬有話說 (10)

  • 資深大佬 : zgw0

    我之前的做法是转了字符串存起来,然后用的时候再转回数组

  • 資深大佬 : z0wjqnxi

    “` 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)
    }

    自定义结构我是这么实现的

  • 主 資深大佬 : richzhu

    @zgw0 谢谢老哥,咱俩想的一样,但是我这情况有点特殊,前端发来的数据结构体必须要保持[]string 的类型才可以收到,又不想大改,就没用这个方法

    @z0wjqnxi 感谢大佬,无脑复制您的代码,把 node 改成 ipList 类型后,一下就成功了,爽的不要不要的~

  • 主 資深大佬 : richzhu

    sql: Scan error on column index 5, name “node”: invalid character ‘.’ after top-level value;

    @z0wjqnxi
    大佬好,使用这个方法之后,不知道为什么,不能读了,读取数据的时候,报上面这个错误

  • 主 資深大佬 : richzhu

    @z0wjqnxi 知道了 哈哈,是表中老数据的问题,打扰大佬了

  • 資深大佬 : Yoock

    AfterFind hook

  • 資深大佬 : cszchen

    用 postgres.jsonb 类型

  • 資深大佬 : reus

    要对 ip 做查询做索引时你就知错

    应该另外建表,存成多行

  • 資深大佬 : adrianduan

    不知道你用的是 gorm V1 还是 V2,如果使用的 PostgreSQL 且版本为 V1 的话可以直接定义类型为 pq.StringArray,V2 好像改了 PostgreSQL 的 driver 从 pq 到 pgx,这种写法就不行了

  • 主 資深大佬 : richzhu

    @reus 大佬好,请问存成多行是什么意思

    是说新建一张表 2 个字段 app ip
    比如一个 app 名字叫 test 有 3 个 ip,另一个 app 名字是 test1,有 2 个 ip,那表中内容就是

    test 1.1.1.1
    test 2.2.2.2
    test 3.3.3.3
    test1 4.4.4.4
    test1 5.5.5.5

    然后对 ip 字段做索引,是这样嘛?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具