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

Go语言之定义结构体(Struct)-《Go语言实战指南》

结构体(struct)是 Go 中的一种复合数据类型,它允许你将多个不同类型的字段组合成一个类型,类似于 C 语言的结构体或面向对象语言中的类。


一、结构体的基本定义

type 结构体名 struct {字段名 字段类型...
}
示例:
type Person struct {Name stringAge  int
}

这里定义了一个 Person 类型,包含两个字段:Name 和 Age


二、创建结构体实例

你可以用多种方式创建结构体实例。

1. 使用字面量(推荐)
p := Person{Name: "Alice", Age: 30}
2. 指针形式(使用 &
p := &Person{Name: "Bob", Age: 25}
fmt.Println(p.Name) // 自动解引用,等价于 (*p).Name
3. 使用 new 关键字(不推荐)
p := new(Person)
p.Name = "Charlie"
p.Age = 22

三、访问与修改字段

p := Person{Name: "Dave", Age: 40}
fmt.Println(p.Name) // 输出:Davep.Age = 41
fmt.Println(p.Age)  // 输出:41

结构体字段是公开(以大写字母开头)还是私有(以小写字母开头)由字段名的首字母决定。


四、结构体的零值

结构体的零值由每个字段的零值组成:

var p Person
fmt.Println(p.Name) // ""
fmt.Println(p.Age)  // 0

五、结构体比较(==)

结构体可以直接用 == 比较,但前提是所有字段类型也支持比较。

p1 := Person{"Tom", 18}
p2 := Person{"Tom", 18}
fmt.Println(p1 == p2) // true

如果结构体中含有 map、slice、function 等不可比较类型,则不能直接用 ==


六、结构体嵌套(组合)

type Address struct {City  stringState string
}type Employee struct {Name    stringAge     intAddress Address
}

使用时:

e := Employee{Name: "Eva",Age:  30,Address: Address{City:  "Beijing",State: "China",},
}
fmt.Println(e.Address.City) // 输出:Beijing

七、结构体标签(Tag)

结构体字段可以带标签(如用于 JSON 编码):

type User struct {ID   int    `json:"id"`Name string `json:"name"`
}

配合标准库 encoding/json 可用于序列化与反序列化。


八、小结

特性说明
定义结构体type StructName struct {}
创建实例使用字面量 {},或 new,或 &{}
字段访问instance.field 或 ptr.field
支持嵌套结构体内可嵌套另一个结构体作为字段
支持比较仅当所有字段可比较时可使用 ==
可加标签(Tag)用于 JSON、DB 映射等反射相关应用场景

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

相关文章:

  • mediapipe标注视频姿态关键点(基础版加进阶版)
  • PCtoLCD2002如何制作6*8字符
  • SmartPlayer与VLC播放RTMP:深度对比分析延迟、稳定性与功能
  • Qt QPaintEvent绘图事件painter使用指南
  • 伪创新-《软件方法》全流程引领AI-第1章 04
  • win11如何重启
  • 【iOS】 锁
  • uni-app学习笔记十五-vue3页面生命周期(一)
  • Flink核心概念小结
  • 《软件工程》第 14 章 - 持续集成
  • 大模型 Agent 中的通用 MCP 机制详解
  • Navicat 17 SQL 预览时表名异常右键表名,点击设计表->SQL预览->另存为的SQL预览时,表名都是 Untitled。
  • Orpheus-TTS:AI文本转语音,免费好用的TTS系统
  • Python爬虫实战:研究Goose框架相关技术
  • webpack优化方法
  • STM32 Keil工程搭建 (手动搭建)流程 2025年5月27日07:42:09
  • MyBatis 框架使用与 Spring 集成时的使用
  • OpenGL Chan视频学习-7 Writing a Shader inOpenGL
  • 顶会新方向:卡尔曼滤波+目标检测
  • 数据库相关问题
  • 一起学数据结构和算法(二)| 数组(线性结构)
  • Linux基本指令篇 —— touch指令
  • 【后端高阶面经:消息队列篇】23、Kafka延迟消息:实现高并发场景下的延迟任务处理
  • Mac安装MongoDB数据库以及MongoDB Compass可视化连接工具
  • 城市地下“隐形卫士”:激光甲烷传感器如何保障燃气安全?
  • MySQL推出全新Hypergraph优化器,正式进军OLAP领域!
  • 飞牛fnNAS手机相册备份及AI搜图
  • 消费类,小家电产品如何做Type-C PD快充快速充电
  • 连接表、视图和存储过程
  • 人工智能赋能教育:重塑学习生态,开启智慧未来