用Go编程入门
一门适合初学者的实践性课程,介绍Go编程语言。课程以太空探索为主题,分为多个小而易管理的章节,涵盖命令式编程、类型、函数、方法、集合、状态以及并发编程。
课程概述
📚 内容概要
一门面向初学者、注重实践的 Go 编程语言入门课程。课程采用太空探索主题,分为多个小而易管理的章节,涵盖命令式编程、类型、函数、方法、集合、状态以及并发。
通过简短的课程和七个太空探索主题的综合项目,发现使用 Go 编程的乐趣。
作者: Nathan Youngman,Roger Peppé
致谢: Jennifer Stout,Marina Michaels,Matthew Merkes,Joel Kotarski,Aleksandar Dragosavljević,Renée French,Olga Shalakhina,Erick Zelaya,April Milne,Monica Kamsvaag。
🎯 学习目标
- 定义 Go 编程语言及其主要应用场景。
- 解释 Go 编译器的作用及其相较于解释器的优势。
- 熟练使用 Go Playground 来编写、编译并运行代码。
- 正确使用强制性的“唯一正确花括号风格”来组织 Go 代码,避免语法错误。
- 使用多种变量声明方式和算术赋值运算符来管理数据。
- 生成伪随机数,并通过分支结构和逻辑运算符实现条件逻辑。
- 使用
float32和float64声明并格式化浮点变量,控制其宽度和精度。 - 识别并缓解由浮点数精度误差和整数溢出引起的错误。
- 利用
big包和无类型常量处理超出标准位宽限制的大数值。 - 使用参数、实参和可变参数语法定义并调用函数。
🔹 第 1 课:进入轨道
概述: 本课介绍 Go 编程语言——现代云计算的核心编程语言。学生将学习 Go 的编译特性与解释型语言的根本区别,如何在 Go Playground 中立即进行实验,并掌握包含包和 main 函数的基本 Go 程序结构。
学习成果:
- 定义 Go 编程语言及其主要应用场景。
- 解释 Go 编译器的作用及其相较于解释器的优势。
- 熟练使用 Go Playground 来编写、编译并运行代码。
🔹 第 2 课:任务控制逻辑
概述: 本课介绍 Go 编程的基础构建模块,重点在于如何组织代码并控制其执行流程。学生将学习“唯一正确花括号风格”和程序入口点,逐步掌握变量声明的快捷方式和数学运算符,并最终学习使用布尔值、比较和分支实现决策逻辑。
学习成果:
- 正确使用强制性的“唯一正确花括号风格”来组织 Go 代码,避免语法错误。
- 使用多种变量声明方式和算术赋值运算符来管理数据。
- 生成伪随机数,并通过分支结构和逻辑运算符实现条件逻辑。
🔹 第 3 课:太空数据的物理原理
概述: 本课探讨 Go 如何处理数值数据,从浮点数的精确度到天文距离所需的超大规模数值。学生将学习如何应对计算机内存的局限性,包括浮点数精度误差和整数溢出问题,同时掌握显式类型转换技巧,并利用 big 包处理“非常规”大小的数值。
学习成果:
- 使用
float32和float64声明并格式化浮点变量,控制其宽度和精度。 - 识别并缓解由浮点数精度误差和整数溢出引发的错误。
- 利用
big包和无类型常量处理超出标准位宽限制的数值。
🔹 第 4 课:构建模块化组件
概述: 本课介绍 Go 程序的基本构建块:函数、自定义类型和方法。学生将学习如何封装可重用的逻辑,定义具有特定行为的新类型,并利用一等函数(包括闭包和匿名函数)创建灵活且模块化的代码。课程以一个实际的综合项目结束,涉及温度转换表的实现。
学习成果:
- 使用参数、实参和可变参数语法定义并调用函数。
- 通过 Go 的命名约定区分导出与未导出的标识符。
- 创建自定义类型,并通过方法和接收者为其添加行为。
🔹 第 5 课:装载货舱
概述: 本课介绍 Go 中用于管理信息集合的关键数据结构。课程从固定长度数组及其内存复制行为开始,过渡到动态切片作为灵活的数据窗口,最后介绍映射(map)以实现高效的键值查找。本单元以“生命游戏”综合项目收尾,展示如何使用多维切片模拟复杂系统。
学习成果:
- 声明、初始化并遍历固定长度数组和多维网格。
- 使用索引范围操作切片,并通过
append函数实现动态增长。 - 通过区分长度与容量,合理预分配集合,提升内存效率。
🔹 第 6 课:规划火星栖息地
概述: 本课介绍 Go 处理复杂数据与行为的方式。学生将学习如何将不同类型的数据组合成结构体(struct),使用复合字面量进行初始化,并通过方法和构造函数管理其行为。课程还探讨了 Go 独特的设计哲学:优先使用组合而非继承,并通过隐式接口实现多态。
学习成果:
- 定义、初始化并复制结构体,以管理复杂的火星坐标和探测车数据。
- 使用结构体标签将 Go 结构体编码为 JSON 格式,实现定制化的数据交换。
- 实现方法、构造函数和结构体嵌入,构建可复用且结构清晰的代码。
🔹 第 7 课:穿越企鹅洞穴
概述: 本课深入探讨指针在 Go 中的力量与安全性,聚焦于指针如何实现高效的数据修改与内存管理。课程提供一套稳健的防御性编程框架,教导学生如何处理 nil 值,使用 defer 管理资源,并实现符合习惯的错误处理模式——最终应用于一个数独验证引擎的实现。
学习成果:
- 使用取地址符(
&)和解引用符(*)管理内存地址并解引用值。 - 在函数和方法中使用指针参数和接收者,实现数据的可变性。
- 在切片、映射和接口中安全地处理
nil值,避免运行时恐慌。
🔹 第 8 课:多探测车通信
概述: 本课介绍 Go 的核心并发原语:协程(goroutine)和通道(channel)。课程探讨如何独立运行任务,安全地在它们之间通信,并使用互斥锁(Mutex)管理共享状态,防止竞态条件。课程以一个综合项目结束,模拟火星探测车在网格中导航并报告发现的过程。
学习成果:
- 使用
go关键字启动和管理并发任务。 - 使用通道和
select语句实现协程间的安全通信。 - 构建数据管道,并通过关闭通道来管理协程生命周期。