Scores: {
Name: "john",
Result: 100,
Scores: {
Name: "john",
Result: 100,
2.0版本确实是存在这个问题,我用的示例中的代码,也没有成功。
type
Ids
struct
{
Id
int
`json:"id"`
Uid
int
`json:"uid"`
}
type
Base
struct
{
Ids
CreateTime
string
`json:"create_time"`
}
type
Users
struct
{
Base
Passport
string
`json:"passport"`
Password
string
`json:"password"`
Nickname
string
`json:"nickname"`
}
datas
:=
g.Map{
"id"
:
1
,
"uid"
:
100
,
"passport"
:
"john"
,
"password"
:
"123456"
,
"nickname"
:
"John"
,
"create_time"
:
"2019"
,
}
users
:=
new
(Users)
gconv.
Struct
(datas, users)
g.
Dump
(users)
result:
{
Id: 1,
Uid: 100,
CreateTime: "2019",
Passport: "john",
Password: "123456",
Nickname: "John",
}
能否支持Struct类型的整体转换,比如一个字符串string,转换为一个Struct,转换规则自定义的方式,类比java中的各种mapper
例如,我现在有个这样的场景,前端输入一个子网网段地址:172.16.1.0/28,但是在struct中定义的字段为: network net.IPNet
像这种的,我想通过convert函数,把”172.16.1.0/28“作为一个整体的输入,通过转换规则:以 / 做分割,得到IP和 mask,然后构造得到IPNet类型的 network字段。
请问有办法可以实现在convert时指定,或者通过全局注入自定义类型构造方法的方式,来将此种类型的转换需求通用化吗?
在做grpc时发现个问题,当数据库返回的结构体包含*gtime.Time类型值时,转换会失败。
type SysDictListRes struct{
RecordId int64 `json:"recordId"`
RecordStatus int `json:"recordStatus"`
CreatedBy string `json:"createdBy"`
CreatedAt *gtime.Time `json:"createdAt"`
DictCode string `json:"dictCode"`
DictName string `json:"dictName"`
Remark string `json:"remark"`
type SysDict struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
RecordId int64 `protobuf:"varint,1,opt,name=RecordId,proto3" json:"RecordId" dc:"编号 记录ID"` // 编号 记录ID
RecordStatus int32 `protobuf:"varint,2,opt,name=RecordStatus,proto3" json:"RecordStatus" dc:"记录状态, 0=启用,1禁用"` // 记录状态, 0=启用,1禁用
CreatedBy string `protobuf:"bytes,3,opt,name=CreatedBy,proto3" json:"CreatedBy" dc:"创建人编号"` // 创建人编号
CreatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=CreatedAt,proto3" json:"CreatedAt,omitempty" dc:"创建时间 默认为当前时间"` // 创建时间 默认为当前时间
DictCode string `protobuf:"bytes,8,opt,name=DictCode,proto3" json:"dictCode" dc:"字典编码 用户自定义,同一租户下唯一"` // 字典编码 用户自定义,同一租户下唯一
DictName string `protobuf:"bytes,9,opt,name=DictName,proto3" json:"DictName" dc:"字典名称"` // 字典名称
Remark string `protobuf:"bytes,10,opt,name=Remark,proto3" json:"Remark,omitempty" dc:"备注"` // 备注
func main() {
source := SysDictListRes{
RecordId: 1665646348394827776,
RecordStatus: 0,
CreatedAt: gtime.New(time.Now()),
CreatedBy: "tester",
DictCode: "sys_test1",
DictName: "测试字典1",
dist := new(SysDict)
gconv.Struct(source, dist)
fmt.Println(source)
fmt.Println(dist)
type GoodsDetailRes struct {
//model.GoodsItem
Id uint `json:"id" description:""` //
Title string `json:"title" description:"标题"` // 标题
Images []string `json:"images" description:"图片"` // 图片
CateId int `json:"cateId" description:"分类ID"` // 分类ID
Price float64 `json:"price" description:"价格"` // 价格
Limit int `json:"limit" description:"限购"` // 限购
Content string `json:"content" description:"详情"` // 详情
Status int `json:"status" description:"状态"` // 状态
Picurl string `json:"picurl" description:""`
Sold int `json:"sold" description:"已售"` // 已售
Skus []model.GoodsSku `json:"skus" description:"SKU"` // SKU
Attr g.Map `json:"attr" description:"属性"` // 属性
}
type GoodsSku struct {
Hide int `json:"hide" description:""`
Name string `json:"name" description:""`
Picurl string `json:"picurl" description:""`
Price float64 `json:"price" description:""`
Sid uint `json:"sid" description:""`
Sold int `json:"sold" description:""`
Sum uint `json:"sum" description:""`
VipPrice float64 `json:"vip_price" description:""`
}
这一行,引用了一个struct的话
Skus []model.GoodsSku `json:"skus" description:"SKU"` // SKU
所有浮点数,以及整数, 全转换成了0呢.
如果换成
Skus []g.Map `json:"skus" description:"SKU"` // SKU
就没事
[{
"hide": 0,
"name": "金黑面钢带款",
"picurl": "http://mt-shop.app.com/uploads/images/2023/06/05/2412529ba9f24152e8b61153bbfd87fb.jpg",
"price": "5",
"sid": "27244498",
"sold": "3",
"sum": "10",
"vip_price": "4"},{
"hide": 0,
"name": "黑面钢带款",
"picurl": "http://mt-shop.app.com/uploads/images/2023/06/05/234439d350b9d1cc8d9392b1aad66681.jpg",
"price": "1",
"sid": "61671448",
"sold": "5",
"sum": "15",
"vip_price": "0.5"},{
"hide": 0,
"name": "白面钢带款",
"picurl": "http://mt-shop.app.com/uploads/images/2023/06/05/e168d5daa9eeb6b3b9fbb8d20c7341e1.jpg",
"price": "2",
"sid": "54686784",
"sold": "2",
"sum": "20",
"vip_price": "1"}]