gpt4 book ai didi

sql - 如何使用 GORM 在 postgresql 中存储 ipv4 和 ipv6 地址

转载 作者:行者123 更新时间:2023-12-05 04:25:29 31 4
gpt4 key购买 nike

我们如何使用 GORM 从具有 inet 数据类型的 ip 地址表中插入和选择用 postgresql 吗?

这是我的模型

import (
"github.com/jackc/pgtype"
)

...
ClientIp pgtype.Inet `json:"client_ip" gorm:"type:inet;not null"`
...

我正在尝试解析字符串格式的 ip 地址以在 postgresql 数据库中键入 pgtype.Inet插入数据库时​​像这样

import (
"net"
)

...
ClientIp: net.ParseIP(c.IP()),
...

我们被告知要 parse the ip using net package但这是错误的

cannot use net.ParseIP(c.IP()) (type net.IP) as type pgtype.Inet in field value

我也尝试过为模型使用 net

import (
"net"
)

...
ClientIp net.IP `json:"client_ip" gorm:"type:inet;not null"`
...

但一直报错

sql: Scan error on column index 16, name "client_ip": unsupported Scan, storing driver.Value type string into type *net.IP

那么我们如何使用 GORM 在 postgresql 中存储 inet 值?

最佳答案

型号:

import (
"github.com/jackc/pgtype"
)

...
ClientIp pgtype.Inet `json:"client_ip" gorm:"type:inet;not null"`
...

然后你可以像这样创建 func SetInet

func SetInet(ip string) pgtype.Inet {
var inet pgtype.Inet
inet.Set(ip)
return inet
}

然后你可以使用那个函数来设置inet:

...
ClientIp: SetInet("127.0.0.1"),
...

如果您不想像这样创建函数,您可以从包含字段 pgtype.Inet

的变量中设置它

例子:

...
type Ip struct {
gorm.Model
ClientIp pgtype.Inet `gorm:"type:inet;not null"`
}
...
var ip Ip

ip.ClientIp.Set("127.0.0.1")
...

关于sql - 如何使用 GORM 在 postgresql 中存储 ipv4 和 ipv6 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73248423/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com