news 2026/8/9 10:03:11

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/8/9 12:04:28

如何使用Dify可视化AI应用开发平台构建RAG系统?

如何使用 Dify 可视化 AI 应用开发平台构建 RAG 系统 在企业级 AI 应用落地的浪潮中,一个现实问题日益凸显:大语言模型虽然“见多识广”,却常常“凭空捏造”——面对专业领域问题时,容易产生事实性错误或幻觉输出。金融、医疗、政…

作者头像 李华
网站建设 2026/8/8 15:12:24

SGMICRO圣邦微 SGM2007-2.8XN5/TR SOT23-5 线性稳压器(LDO)

特性 低输出噪声:30uVrms(1kHz至100kHz)超低压差电压:在300mA输出时为300mV低负载电流:77μA 在300mA输出时,低功耗运行电流为200μ A 高电源抑制比(1kHz时为73dB) 热过载保护 输出电流限制 -10纳安逻辑控制关断 提供多种输出电压版本 固定输出电压为1.8V、2.5V、2.…

作者头像 李华
网站建设 2026/8/8 15:25:11

汽车厂内物流如何通过自动化实现降本增效?

在当今制造业快速发展的背景下,汽车厂内物流自动化已成为提升企业竞争力的重要手段。传统的仓储和物流管理模式依赖大量人工操作,不仅效率低下,还容易导致库存积压、物料错配等问题,严重制约了生产节奏和市场响应速度。随着工业互…

作者头像 李华
网站建设 2026/8/8 8:16:50

SGMICRO圣邦微 SGM2013-1.2XK3L/TR SOT89 线性稳压器(LDO)

特性 工作输入电压范围:2.5V至5.5V 固定输出电压: 1.2V、1.5V、1.8V、2.5V、2.8V、3.0V和3.3V最大输出电流:300mA 输出电压精度:25C时士2.5% 低输出噪声:140uVRrms(典型值) 低压差电压:在300mA时为270mV(典型值)高电源抑制比:在1kHz时典型值为72dB 热关断保护 输出电流限制 -40…

作者头像 李华
网站建设 2026/8/9 18:22:13

Python机器学习:从零基础到资深专业

​目录 第一部分:思想与基石——万法归宗,筑基问道 第1章:初探智慧之境——机器学习世界观 1.1 何为学习?从人类学习到机器智能1.2 机器学习的“前世今生”:一部思想与技术的演进史1.3 为何是Python?——…

作者头像 李华
网站建设 2026/8/9 17:33:25

Lostlife2.0下载官网未提及的GPT-SoVITS语音模组扩展

Lostlife2.0下载官网未提及的GPT-SoVITS语音模组扩展 在如今AI角色交互日益普及的时代,用户早已不再满足于“能说话”的机器人。他们期待的是有性格、有情绪、甚至“听得出来是谁”的声音伴侣。而就在一些热门项目如 Lostlife2.0 中,尽管官方文档并未明说…

作者头像 李华