接触 go 不久,有如下结构体:
type User struct {
UID int `json:"uid"`
Item string `json:"item"` // item 数据格式:{"f1":[1,2,3], "f2": [4,5,6]}
// ...
}
其中 Item 的值是一串 json,代码中好多地方需要操作这个 Item,每次操作的时候需要将其反序列化成对象,操作完了在序列化然后赋值给 Item
为了防止重复的写序列化和反序列化这两部分代码,我给 User 这个结构体绑上了两个方法:
func (u *User) UnmarshalItem(){
// ...
}
func (u *User) MarshalItem(){
// ...
}
这样每次只需要user.UnmarshalItem()
或者user.MarshalItem()
即可
后来发现这样还是避免不了频繁的序列化和反序列化,于是就给 User 再加一个反序列化后的属性,这样就不用每次都要反序列化了
type User struct {
UID int `json:"uid"`
Item string `json:"item"`
ItemObject map[string][]int `json:"itemObject"`
// ...
}
大佬们还有更好的解决方案吗?
其实我想实现这样的效果:
我在 User struct 里定义的时候 Item 的类型就是 map[string][]int,我想要获得 Item 的 json 的时候只需要 user.Item.String 就能获得了(这样好像得把 Item 也定义成结构体,然后再在 Item 这个结构体力定义 String,然后嵌套才行是不是)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.