news 2026/2/3 10:44:20

Go语言结构体

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Go语言结构体

一、什么是结构体(Struct)

结构体是 Go 里用来组织一组不同类型字段的复合数据类型,有点像 Java 里的class,但:

  • 没有继承

  • 没有构造函数

  • 首字母大写 = 对外可见,首字母小写 = 包内可见

示例:

type User struct { Id int Name string Age int }

二、结构体的基本使用

1. 声明 + 初始化

方式一:按字段顺序(不推荐)
u := User{1, "Tom", 18}

可读性差,字段一多容易翻车。

方式二:指定字段名(推荐)

u := User{ Id: 1, Name: "Tom", Age: 18, }

方式三:new 创建(返回指针)

u := new(User) u.Id = 1 u.Name = "Tom"

2. 访问字段

fmt.Println(u.Name) u.Age = 20

指针也可以直接用.访问字段,Go 会自动解引用:

pu := &u pu.Age = 21 // 等价于 (*pu).Age = 21

三、结构体与方法(Go 的“面向对象”)

1. 给结构体定义方法

type User struct { Name string Age int } func (u User) SayHi() { fmt.Println("Hi, I'm", u.Name) }

调用:

u.SayHi()

2. 值接收者 vs 指针接收者(非常重要)

值接收者(拷贝)

func (u User) Grow() { u.Age++ }

不会修改原对象

指针接收者(推荐)

func (u *User) Grow() { u.Age++ }

✅ 会修改原对象

经验法则

只要方法会改结构体内容,一律用指针接收者

四、结构体标签(tag)——Web / JSON 必备

type User struct { Id int `json:"id"` Name string `json:"name"` Age int `json:"age,omitempty"` }

上面Age中的omitempty用途

  • 字段是零值不序列化

  • 非零值 → 正常输出

常见用途:

  • json/xml序列化

  • gormORM 映射

  • validate参数校验

data, _ := json.Marshal(u)

作用:把 Go 数据结构 → JSON 字节数组

五、结构体嵌套(组合代替继承)

Go没有继承,但有“嵌入结构体”(组合)

type Address struct { City string } type User struct { Name string Address }

使用:

u := User{ Name: "Tom", Address: Address{ City: "Beijing", }, } fmt.Println(u.City) // 直接访问

这就是 Go 提倡的:组合优于继承

六、结构体比较 & 零值

1. 零值

var u User

默认值:

  • int →0

  • string →""

  • bool →false

  • 指针 / map / slice →nil

2. 结构体是否可比较

所有字段都可比较 → 结构体可比较

包含 map / slice / func → 则不可比较

七、和 Java 的一个快速对比

JavaGo
classstruct
getter/setter直接字段访问
继承组合
构造函数字面量初始化
private/public首字母大小写

八、常见坑提醒

1.字段小写无法 JSON 序列化

type User struct { name string // ❌ }

2.忘记用指针接收者导致数据不生效

3.结构体复制是值拷贝

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/2 23:17:55

Jetson AGX Orin+FPGA+GMSL+AI具身智能机器视觉解决方案,支持定制

Jetson AGX OrinFPGAGMSLAI机器视觉解决方案全新Jetson AGX Orin视觉开发套件,实现硬件结构、同步功能、驱动框架三重升级,显著提升边缘AI设备视觉感知模块的开发效率与性能表现:| 硬件结构升级——简洁易用套件采用信迈独有子母板分板架构&a…

作者头像 李华
网站建设 2026/2/3 0:34:39

AI能源效率危机:大模型能耗远超人类大脑,如何实现可持续发展?

引言 当GPT-3单次训练消耗1287MWh电力,相当于1000户中国家庭一年的用电量,当全球大模型年耗电量已达24.97-41.1 TWh(约为三峡工程年发电量的40%),AI技术的爆发式增长正遭遇能源效率的严峻拷问。与大模型的巨量能耗形成…

作者头像 李华
网站建设 2026/2/3 0:17:33

鸿蒙应用签名与上架全流程:从开发完成到用户手中

鸿蒙应用签名与上架全流程:从开发完成到用户手中 一、章节概述 ✅ 学习目标 掌握鸿蒙应用签名的核心原理与证书体系熟练完成应用签名与打包操作理解AppGallery Connect上架流程具备应用审核问题的处理能力构建应用发布的标准化流程 💡 重点内容 签名…

作者头像 李华
网站建设 2026/2/2 23:18:02

雪深监测站:积雪厚度与降雪总量的信息采集

雪深监测站是一种采用激光测量技术对积雪深度进行监测的设备。它通过相位式激光测距原理,对雪面距离进行精确测量,并据此计算出雪的厚度及单位时间内的降雪量。该设备可独立运行,也可接入网络进行多元化监测。测量时,设备向雪面发…

作者头像 李华
网站建设 2026/2/2 23:18:04

微信聊天记录突然消失怎么办,别急这招能帮你找回

凌晨三点,张女士突然从床上坐起,手指在手机屏幕上疯狂滑动——和客户敲定的合同细节、孩子第一次叫妈妈的语音、闺蜜分享的秘密心事,全都随着微信聊天记录的消失无影无踪。这种让人头皮发麻的场景,可能每个手机用户都或多或少经历…

作者头像 李华
网站建设 2026/2/2 13:42:01

13、系统设置全解析:从用户到管理员的全方位指南

系统设置全解析:从用户到管理员的全方位指南 1. 用户系统设置之多媒体模块 1.1 多媒体模块概述 多媒体模块可让用户查看多媒体子系统正在使用的声卡和后端驱动。若用户有多张声卡,能为每个类别指定其顺序。例如,可将连接扬声器的声卡用于视频播放,将连接耳机的声卡用于通…

作者头像 李华