Golang Go语言中两个struct之间的值赋值问题
Golang Go语言中两个struct之间的值赋值问题
type Resp struct {
Code int
Result map[string]interface{}
}
type Info struct {
Uid string
PicInfo []Pic
Tags Tag
}
type Pic struct {
PicName string
PicSize int
}
type Tag struct {
TagType string
TagName string
}
用 Resp 把某个接口返回的数据加载 接口返回 json 例:
json
{
"Code": 1,
"Result": {
"Userid": 123,
"Pics": [
{
"PicName": "1.jpg",
"PicSize": 111
},
{
"PicName": "2.jpg",
"PicSize": 222
}
],
"TagType": "TypeA",
"TagName": "S"
}
}
- 如何把 json 的 Result 内外层的 TagType 的值赋给 Info.Tag.TagType,因为实际的字段太多,层级也不一样,所以不想每个单独赋值,有没有什么解决办法,比如 struct 的 tag ?
另外
- Info 会去构造 Xml,所以标签名和结构不能变。
- 还有比如要把 Userid -> Uid 名称不一样的问题
更多关于Golang Go语言中两个struct之间的值赋值问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
- 如果要完整的赋值, 应该需要一个新的 struct 来对应到 json 的结构
2. Userid -> Uid 名称不一样的问题 可以 tag 里面写 json 的 tag 即可
3. 如果仅仅是获取 json 中的某些值可以考虑 gjson 直接取不用再解析到 struct, 或者直接 map[string]interface
更多关于Golang Go语言中两个struct之间的值赋值问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
将
type Info struct {
Uid string
PicInfo []Pic
Tags Tag
}
修改为
type Info struct {
Uid string
PicInfo []Pic
Tag
}
并且使用 json tag 命名 json 字段名
interface{} 一把梭,直接扔进去
谢谢 ~
1. 如果新的 struct 对应 json 的话,如何把这个 新 struct 值赋值给 Info ?只能依靠依次赋值吗?
在Go语言中,两个struct之间的值赋值是一个常见的操作。值得注意的是,Go语言中的struct是值类型(value type),这意味着当你将一个struct变量赋值给另一个同类型的变量时,会进行值的拷贝。
具体来说,如果你有两个同类型的struct变量a和b,当你执行b = a
时,a中的所有字段值都会被复制到b中。这是一个浅拷贝(shallow copy)的过程,即只复制了字段的值,如果字段本身是引用类型(如切片、映射、指针等),则复制的是引用的地址,而不是引用的数据本身。
如果struct中包含了大量的数据或者复杂的嵌套结构,值的拷贝可能会带来一定的性能开销。在这种情况下,可以考虑以下几种优化策略:
-
使用指针:将struct的字段定义为指针类型,这样赋值时只会复制指针的地址,而不是数据本身。但需要注意的是,这也会带来额外的内存管理开销和潜在的空指针解引用风险。
-
实现自定义的拷贝方法:为struct实现一个拷贝方法,该方法可以根据实际需求进行深拷贝(deep copy)或浅拷贝。
-
使用第三方库:Go社区中有一些第三方库提供了深拷贝的功能,如
github.com/mitchellh/copystructure
等,这些库可以简化深拷贝的实现过程。
总的来说,在Go语言中,struct之间的值赋值是一个灵活且强大的特性,但在使用时也需要根据具体场景进行性能考虑和优化。