--- title: Go复合数据与函数 tags: - module - go - data-structure - function - joplin type: module source_type: reconstructed created: 2026-04-22 updated: 2026-04-22 --- # Go复合数据与函数 > [!abstract] > 这一模块处理 Go 中最常用的数据组织方式和函数能力。重点是理解 Go 如何用较少语法支撑常见编程结构。 ## 模块结论 - [[Go函数]] 是 Go 程序组织逻辑的基本单位,并支持多返回值等特性。 - 数组、[[Go切片]]、map、[[Go结构体]] 构成 Go 最常见的数据组织方式。 - [[Go指针]] 保留了地址语义,但整体风格比 C/C++ 更克制。 ## 一、函数 - 使用 `func` 定义。 - 支持参数、返回值、多返回值。 - 是组织逻辑和错误返回的核心机制。 ## 二、数组与切片 - 数组长度固定。 - 切片是对底层数组的一层动态视图。 - 切片是 Go 开发中更常用的序列结构。 ### 为什么切片重要 - 它兼顾了数组基础和动态使用体验。 - 很多标准库 API 都围绕切片设计。 ## 三、range 与递归 - `range` 常用于遍历数组、切片、map、channel。 - 递归适合表达自相似问题,但仍要注意终止条件和开销。 ## 四、结构体与 map - 结构体适合表达具名字段对象。 - map 适合表达键值映射关系。 - 一个偏“记录”,一个偏“索引”。 ## 五、指针与类型转换 - Go 允许通过指针实现共享修改。 - 但不像 C++ 那样把大量抽象都建立在指针操作上。 - 类型转换需要显式表达。 ## 六、易错点 - 切片不是简单动态数组别名,要理解长度、容量和底层共享关系。 - map 是引用语义更强的结构,修改行为要分清。 - Go 有指针,但没有把指针暴露成一切抽象中心。 ## 七、复习提问 - Go 函数为什么支持多返回值? - 数组和切片的根本区别是什么? - 结构体和 map 分别适合表达什么类型的数据? ## 来源 - [[raw/Joplin/编程学习项目/Go学习笔记/Go基础语法/9.Go语言函数.md]] - [[raw/Joplin/编程学习项目/Go学习笔记/Go基础语法/11.Go语言数组.md]] - [[raw/Joplin/编程学习项目/Go学习笔记/Go基础语法/12.Go语言指针.md]] - [[raw/Joplin/编程学习项目/Go学习笔记/Go基础语法/13.Go语言结构体.md]] - [[raw/Joplin/编程学习项目/Go学习笔记/Go基础语法/14.Go语言切片(Slice).md]] - [[raw/Joplin/编程学习项目/Go学习笔记/Go基础语法/15.Go语言范围(Range).md]] - [[raw/Joplin/编程学习项目/Go学习笔记/Go基础语法/16.Go语言Map(集合).md]] - [[raw/Joplin/编程学习项目/Go学习笔记/Go基础语法/17.Go语言递归函数.md]] - [[raw/Joplin/编程学习项目/Go学习笔记/Go基础语法/18.Go语言类型转换.md]] ## 相关页面 - [[Go]] - [[Go函数]] - [[Go切片]] - [[Go结构体]] - [[Go指针]]