当前位置: 首页 > 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

相关文章:

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

现在有一个结构体,其中一个属性组合了另外一个结构体,如下所示: type User struct {Id int64Name stringAge int64UserInfo }type UserInfo struct {Phone stringAddress string }如果要给 User 结构体的 Phone 和 Address 赋值的话&am…...

DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?

DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗? 文章目录 DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?一、引言1. 背景2. 问题 二、DeepSeek vs ChatGPT:谁更胜一筹?2.1 语言生成能力评测对比场景…...

新建github操作

1.在github.com的主页根据提示新建一个depository。 2.配置用户名和邮箱 git config --global user.name "name" git config --global user.email "email" 3.生成ssh秘钥 ssh-keygen -t rsa 找到public key 对应的文件路径 cat /root/.ssh/id_rsa 复制显…...

Spring Boot 携手 DeepSeek:开启智能交互新时代

前言 在当今数字化浪潮汹涌澎湃的时代,人工智能技术正以前所未有的速度改变着我们的生活和工作方式。大语言模型作为人工智能领域的一颗璀璨明星,凭借其强大的自然语言处理能力,为各个行业带来了新的发展机遇。DeepSeek 作为一款性能卓越的大语言模型,以其高效、准确的文本…...

基于SSM+uniapp的数学辅导小程序+LW示例参考

1.项目介绍 系统角色:管理员、普通用户功能模块:用户管理、学习中心、知识分类管理、学习周报管理、口算练习管理、试题管理、考试管理、错题本等技术选型:SSM,Vue(后端管理web),uniapp等测试环…...

HTML的入门

一、HTML HTML(HyperText Markup Language,超文本标记语言)是一种用来告知浏览器如何组织页面的标记语言。 超文本:就是超越了文本;HTML不仅仅可以用来显示文本(字符串、数字之类),还可以显示视频、音频等…...

Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1

Rust-GDAL 是 Rust 语言的 GDAL(Geospatial Data Abstraction Library) 绑定库,用于处理地理数据。由于 GDAL 依赖较多,在 Windows 上的安装相对复杂,本文档将介绍如何安装 GDAL 并配置 Rust-GDAL 的开发环境。 1. 检…...

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini) 📊 引言 近年来,AI 编程助手已成为开发者的高效工具,它们可以加速代码编写、优化代码结构,并提供智能提示。本文介绍如何在 IntelliJ I…...

【金三银四】分享数据库笔试题及答案~~

你是否在面试中遇到过关于数据库的笔试题?如何高效地准备这些题目,提升自己的竞争力?本文将为你整理一些经典的数据库笔试题及其答案,助你备战面试。 金三银四马上来了,测试年限较短难免会碰到笔试题,最近…...

3.1 AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论

AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论 引言:AI时代产品经理的范式跃迁 Gartner预测,到2026年75%的AI项目失败将归因于产品管理缺失。本文揭示AI Agent产品经理的六大核心能力模型,通过GitHub Sentinel等案例,展示如何将大模型技术转化为可持续商…...

MySQL常见错误码及解决方法(1130、1461、2003、1040、2000、1049、1062、1129、2002、1690等)

目录 【问题1】、FATAL: error 1130: Unknown error 1130 【问题2】、FATAL: error: 1461 【问题3】、ERROR 2003 (HY000): Cant connect to MySQL server on "" (113) 【问题4】、FATAL: error 2003: Cant connect to MySQL server on 172.19.111.151 (111) 【问…...

Rhel Centos环境开关机自动脚本

Rhel Centos环境开关机自动脚本 1. 业务需求2. 解决方法2.1 rc.local2.2 rc.d2.3 systemd2.4 systemd附着的方法2.5 tuned 3. 测试 1. 业务需求 一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员. 想达到的效果: 由于是非标准的apache或者nginx…...

2D 游戏艺术、动画和光照

原文:https://unity.com/resources/2d-game-art-animation-lighting-for-artists-ebook 笔记 用Tilemap瓷砖大小为1单元,人物大小在0.5~2单元 PPU :单位像素 pixels per unit 2160 4K分辨率/ 正交相机size*2 完整屏幕显示像素点 有骨骼动…...

基于SSM+uniapp的鲜花销售小程序+LW示例参考

1.项目介绍 系统角色:管理员、商户功能模块:用户管理、商户管理、鲜花分类管理、鲜花管理、订单管理、收藏管理、购物车、充值、下单等技术选型:SSM,Vue(后端管理web),uniapp等测试环境&#x…...

【第3章:卷积神经网络(CNN)——3.1 CNN的基本结构与工作原理】

嘿,小伙伴们,今天咱们来聊聊深度学习里的一大明星——卷积神经网络(CNN)。这东西在图像识别、视频处理等领域简直不要太火,甚至人脸识别、物体检测这些高大上的应用,都离不开它的身影。废话不多说,咱们这就开聊! 一、CNN是什么东东? 在人工智能领域,卷积神经网络(…...

java原子操作类实现原理

文章目录 AtomicLong实现原理递增和递减操作代码总结 LongAdder实现原理实现原理LongAdder 代码分析构造方法sum方法reset方法sumThenReset方法longValue方法add 方法longAccumulate 方法 总结 JUC 包提供 了一系列的原子性操作类,这些类都是使用非阻塞算法 CAS 实现…...

网络安全-攻击流程-传输层

传输层攻击主要针对OSI模型的第四层,涉及TCP和UDP协议的安全漏洞。以下是常见攻击类型及其流程,以及防御措施: 1. SYN洪水攻击(TCP半连接攻击) 攻击流程: 目标选择:确定目标服务器的IP地址和开…...

【R语言】回归分析

一、线性回归分析 1、lm()函数 lm()函数是用于拟合线性模型(Linear Models)的主要函数。线性模型是一种统计方法,用于描述一个或多个自变量(预测变量、解释变量)与因变量(响应变量)之间的关系…...

在分布式场景下可以使用synchronized加锁么?

首先说结论,在分布式系统中,单纯使用 Java 中的 synchronized 关键字是无法满足需求的,下面从 synchronized 的作用原理、在分布式场景下的局限性以及替代方案等方面详细分析。 一、synchronized 的作用原理 在 Java 中,synchron…...

LeetCodehot 力扣热题100 从前序与中序遍历序列构造二叉树

初始版本 这段代码实现了根据前序遍历和中序遍历重建二叉树。下面我将详细解释每一行的作用&#xff0c;并逐步讲解算法的思路和运行步骤。 代码及注释 class Solution {public:// buildTree 函数用来根据前序遍历(pre)和中序遍历(in)重建二叉树TreeNode* buildTree(vector<…...

Qdrant向量数据库MCP服务器:AI智能体标准化工具集成指南

1. 项目概述&#xff1a;向量数据库的“翻译官”如果你最近在折腾AI应用&#xff0c;尤其是那些需要处理大量非结构化数据&#xff08;比如文档、图片、音频&#xff09;的智能体&#xff08;Agent&#xff09;或者RAG&#xff08;检索增强生成&#xff09;系统&#xff0c;那你…...

告别Ubuntu!在Windows上为Isaac Sim 2023.1.1配置强化学习环境(OmniIsaacGymEnvs保姆级指南)

告别Ubuntu&#xff01;Windows原生环境下的Isaac Sim强化学习实战指南 在机器人开发和强化学习领域&#xff0c;NVIDIA Isaac Sim凭借其强大的物理仿真能力和与Omniverse平台的深度整合&#xff0c;正成为越来越多研究者和工程师的首选工具。然而&#xff0c;官方对Ubuntu系统…...

流媒体订阅自动取消?原来是同步与异步的竞态条件在作祟!

自动取消的订阅2026 年 4 月 1 日&#xff0c;这篇文章是 [四月趣事俱乐部] 的一部分&#xff0c;是一项在愚人节发布关于意外话题的真实文章的活动。几个月前的一个周五晚上&#xff0c;作者和家人打算在常用的流媒体平台上放松看节目&#xff0c;该订阅服务是一张信用卡的福利…...

百度网盘提取码智能获取工具:3分钟从搜索焦虑到一键解决的效率革命

百度网盘提取码智能获取工具&#xff1a;3分钟从搜索焦虑到一键解决的效率革命 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经为了一个百度网盘提取码&#xff0c;在浏览器、论坛、聊天记录之间反复切换&#xff0…...

BBDown终极指南:高效下载B站视频的专业级命令行工具

BBDown终极指南&#xff1a;高效下载B站视频的专业级命令行工具 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown是一款功能强大的开源命令行工具&#xff0c;专为Bilibili视频下…...

我们如何教AI听懂一首歌的“好”?——ICASSP 2026音乐美学评估竞赛方案解读

一、技术解读最近&#xff0c;AI生成音乐&#xff08;如Suno, Udio&#xff09;的爆发让我们惊叹于机器的创造力。但一个随之而来的问题是&#xff1a;我们如何客观地评价一首AI生成的歌是不是真的“好听”&#xff1f; 传统的音频指标对此无能为力。信噪比、频谱失真度这些数字…...

开源情报实战指南:从工具到体系的OSINT方法论与自动化实践

1. 项目概述&#xff1a;一个开源情报收集的实战指南最近在整理自己的安全工具箱时&#xff0c;发现很多朋友对开源情报&#xff08;OSINT&#xff09;的实战应用很感兴趣&#xff0c;但往往止步于理论&#xff0c;或者被海量的工具和碎片化的信息淹没。恰好&#xff0c;我在Gi…...

保姆级图解:AMBA CHI协议Link层握手与Credit机制(附信号时序)

深入解析AMBA CHI协议Link层&#xff1a;从握手到Credit流控的实战指南 在复杂的SoC设计中&#xff0c;AMBA CHI协议作为新一代高性能互连标准&#xff0c;其Link层的握手与Credit机制往往是工程师们最先遇到的技术门槛。想象一下&#xff0c;当你面对LINKACTIVEREQ/ACK信号跳变…...

ClawDen:基于Node.js的配置驱动网页自动化与数据抓取框架实战

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目&#xff0c;叫 ClawDen。乍一看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;但如果你对自动化测试、网页数据抓取或者RPA&#xff08;机器人流程自动化&#xff09;感兴趣&#xff0c;那这个项目绝对值得你花时…...

Fiddler弱网测试全攻略

利用Fiddler进行弱网测试 弱网测试是模拟网络延迟、丢包或带宽限制等不良网络条件的过程&#xff0c;用于评估应用在真实环境中的性能和稳定性。Fiddler是一个强大的网络调试工具&#xff0c;支持通过自定义规则模拟弱网环境。以下是逐步指南&#xff0c;帮助您实现弱网测试&a…...