当前位置: 首页 > news >正文

Golang关于结构体组合赋值的问题

现在有一个结构体,其中一个属性组合了另外一个结构体,如下所示:

type User struct {Id   int64Name stringAge  int64UserInfo
}type UserInfo struct {Phone   stringAddress string
}

如果要给 User 结构体的 PhoneAddress 赋值的话,有两种写法,如下:

func main() {//方式1var user1 Useruser1.Id = 1user1.Name = "张三"user1.Age = 18user1.Phone = "123456789"user1.Address = "北京"jsonData1, _ := json.Marshal(user1)fmt.Println(string(jsonData1))//方式2user2 := User{Id:   1,Name: "张三",Age:  18,UserInfo: UserInfo{Phone:   "123456789",Address: "北京",},}jsonData2, _ := json.Marshal(user2)fmt.Println(string(jsonData2))
}

这两种方法都能输出一维结构的json:
在这里插入图片描述

注意:下面两种赋值方式都是错的,编译不通过:

//方式2的错误写法1:
user2Error1 := User{Id:   1,Name: "张三",Age:  18,UserInfo{ //报错:Mixture of fields: value and value initializersPhone:   "123456789",Address: "北京",},
}//方式2的错误写法2:
user2Error1 := User{Id:      1,Name:    "张三",Age:     18,Phone:   "123456789", //报错:读取不到此属性 Unknown field 'Phone' in struct literal,下同Address: "北京",
}

在这里插入图片描述

如果组合的结构体在另外一个 package 里面,看下面,注意细节:

package commontype ExtraData struct {ExtraId   int64ExtraName string
}
type User struct {Id               int64Name             stringAge              int64UserInfo         //组合当前package的结构体common.ExtraData //组合其它package的结构体
}
user2 := User{Id:   1,Name: "张三",Age:  18,UserInfo: UserInfo{ //组合当前package的结构体Phone:   "123456789",Address: "北京",},ExtraData: common.ExtraData{ //组合其它package的结构体ExtraId:   100,ExtraName: "extraName",},
}

输出结果:

{"Id":1,"Name":"张三","Age":18,"Phone":"123456789","Address":"北京","ExtraId":100,"ExtraName":"extraName"}

注意这两个地方的写法:
在这里插入图片描述

如果需要输出二维结构,那么定义的结构体应当是下面这样:

// 定义二维结构体
type User2 struct {Id   int64    `json:"id"`Name string   `json:"name"`Age  int64    `json:"age"`Info UserInfo `json:"info"` //注意:这里需要给组合的结构体前面加一个属性名称
}type UserInfo struct {Phone   stringAddress string
}

然后赋值的方式如下:

//输出二维结构
var u1 User2
u1.Id = 2
u1.Name = "李四"
u1.Age = 25
u1.Info.Phone = "131000001"
u1.Info.Address = "上海"
json1, _ := json.Marshal(u1)
fmt.Println(string(json1))u2 := User2{Id:   3,Name: "王五",Age:  39,Info: UserInfo{Phone:   "1891234",Address: "深圳",},
}
json2, _ := json.Marshal(u2)
fmt.Println(string(json2))

在这里插入图片描述

https://gitee.com/rxbook/go-demo-2025/blob/master/demo/structDemo/struct_combination.go

http://www.lryc.cn/news/537768.html

相关文章:

  • DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?
  • 新建github操作
  • Spring Boot 携手 DeepSeek:开启智能交互新时代
  • 基于SSM+uniapp的数学辅导小程序+LW示例参考
  • HTML的入门
  • Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1
  • IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)
  • 【金三银四】分享数据库笔试题及答案~~
  • 3.1 AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论
  • MySQL常见错误码及解决方法(1130、1461、2003、1040、2000、1049、1062、1129、2002、1690等)
  • Rhel Centos环境开关机自动脚本
  • 2D 游戏艺术、动画和光照
  • 基于SSM+uniapp的鲜花销售小程序+LW示例参考
  • 【第3章:卷积神经网络(CNN)——3.1 CNN的基本结构与工作原理】
  • java原子操作类实现原理
  • 网络安全-攻击流程-传输层
  • 【R语言】回归分析
  • 在分布式场景下可以使用synchronized加锁么?
  • LeetCodehot 力扣热题100 从前序与中序遍历序列构造二叉树
  • Day45(补)【软考】2022年下半年软考软件设计师综合知识真题-计算机软件知识1
  • luoguP8764 [蓝桥杯 2021 国 BC] 二进制问题
  • 图形渲染(一)——Skia、OpenGL、Mesa 和 Vulkan简介
  • 浏览器打开Axure RP模型
  • 【计算机网络】数据链路层数据帧(Frame)格式
  • 平面与平面相交算法杂谈
  • web集群(LVS-DR)
  • 更高效实用 vscode 的常用设置
  • win11 终端乱码导致IDE 各种输出也乱码
  • 对于简单的HTML、CSS、JavaScript前端,我们可以通过几种方式连接后端
  • Flutter中 List列表中移除特定元素