- 示例工程
- 教程
【免费下载链接】learngo
❤️ 1000+ Hand-Crafted Go Examples, Exercises, and Quizzes. 🚀 Learn Go by fixing 1000+ tiny programs.
导读:本文围绕 programmers-roadmap.md 展开,是 learngo 仓库为有经验的开发者设计的"浓缩版学习路线"——从约 180 讲全量课程中精选出约 50 讲,按「入门 → 类型系统 → 控制流与错误处理 → 实战项目 → 进阶」五层递进。读完本文,你将掌握如何按自身水平跳过冗余章节、如何用仓库中 1000+ 个 Go 示例与练习(覆盖 06-variables 到 26-pointers 的完整目录)进行刻意练习,以及 Go 语言的定位、设计者与典型应用场景,从而规划出一条属于自己的高效 Go 学习路径。
一、这条路线的设计初衷:为有经验的开发者省时
本仓库的完整课程从最基础开始,按等级逐步推进——"复杂度在每个等级都会上升",作者 Inanc Gumus 在文档中明确说明这是为了让零基础学习者也能轻松跟上。但如果你已经是一名有经验的开发者,无需听完全部 180 讲:
- 按本路线图学习,你只需要观看约 50 讲;
- 对于自认为已经掌握的主题,可以直接观看小结(recap)讲座、做测验(quizzes)和练习(exercises),甚至可以完全跳过该小节,日后需要时再回来补课;
- 这一"跳过 → 测验 → 练习 → 回补"的模式与仓库的目录设计完全吻合:每个章节目录下都配有独立的
exercises/(练习)与questions/(测验),例如 03-packages-and-scopes/exercises 与 03-packages-and-scopes/questions,你可以随时用练习检验自己的掌握程度。
提示:文末还有一段BONUS 章节,系统回答了"为什么要学 Go、Go 被用在哪些场景、谁设计了 Go"等背景问题,帮助你判断这条路线是否适合自己。
二、LECTURES:五层递进的学习路线
第 1 层:编写你的第一个 Go 程序(建议全部观看)
路线图明确要求"请观看本部分的所有讲座",因为这是所有后续内容的地基,包含:
- What is Go Doc?:学会用
go doc命令查看标准库文档。在仓库 02-write-your-first-program/main.go 中就示范了go doc -src fmt Println的用法,可以看到fmt.Println只是fmt包中一个首字母大写的导出函数; - Write a Library Package系列讲座:学会编写与使用自己的库包。
仓库配套佐证:完整入门示例见 02-write-your-first-program/main.go,其中注释详细说明了package main的特殊性(让 Go 生成可执行文件)、func main是程序入口、fmt.Println的调用方式。配套的命令速查见 02-write-your-first-program/README.md:
# 构建(生成可执行文件) go build main.go # 运行 go run main.go # 目录下有多个 .go 文件时,运行整个目录 go run .练习题在 02-write-your-first-program/exercises/01-print-names,配套测验在 02-write-your-first-program/questions(涵盖 GOPATH、如何编写与运行第一个程序)。
关于库包:仓库 05-write-your-first-library-package 提供了完整示例。核心库 printer.go 定义了一个可导出的函数:
package printer import "fmt" // Hello is an exported function func Hello() { fmt.Println("exported hello") }而 cmd/main.go 则展示了如何通过 import 路径github.com/inancgumus/learngo/05-write-your-first-library-package/printer引用并调用printer.Hello()。练习见 05-write-your-first-library-package/exercise(其解决方案 go.go 演示了用runtime.Version()输出当前 Go 版本)。
第 2 层:掌握 Go 的类型系统(核心内容最多的一层)
这是路线图中讲座密度最高的部分,主题包括:
变量与声明
- 每个 Go 类型都有零值(zero value);
- 什么是空白标识符(blank identifier)
_; - 声明变量的基本语法(
var声明); - 什么是类型推断(type inference);
- 如何短声明多个变量(
:=); - 为什么不能在包级作用域使用短声明?
- 什么是重复声明(redeclaration)?
- 何时该用短声明?
命令行输入与切片
- 从命令行获取输入并初步认识slices(切片);
os.Args的基础用法与用它向人们打招呼。仓库 06-variables/04-assignment 下有完整的 path-project 系列示例(07-path-project、08-path-project-discarding、09-path-project-shortdecl),分别演示了普通赋值、用空白标识符丢弃返回值、用短声明三种处理命令行参数的方式。
格式化输出
- 观看 "Print Formulated Output Using Printf" 系列讲座。仓库 07-printf 提供了完整的 printf 讲解(含 printf cheatsheet.pdf 与 01-print-your-age、06-print-the-type 等 10+ 个练习题)。
类型转换练习
- 将摄氏度转换为华氏度;
- 将英尺转换为米。后者的完整演进可见 08-numbers-and-strings/01-numbers/06-project-feet-to-meters,以及后续 10-constants/03-refactor-feet-to-meters 中"用常量消除魔法数"的重构版本,与 09-go-type-system/exercises/05-refactor-feet-to-meter 的类型化重构练习。
字符串
- 什么是原始字符串字面量(Raw String Literal)(反引号包裹、不做转义)?见 08-numbers-and-strings/02-strings/01-raw-string-literal;
- 如何获取字符串长度?见 08-numbers-and-strings/02-strings/03-string-length。
预声明类型与类型系统
- "什么是预声明类型?"之后的讲座直到本节结束(对应 09-go-type-system 的 bits/bytes/溢出/自定义类型/别名类型等全部内容)。
无类型常量(Untyped Constants)路线图特别点名了以下讲座:
- 学习常量的规则;
- 常量小结;
- 无类型常量在底层是如何运作的?
- 什么是默认类型(Default Type)?
- 示例:
time.Duration; - 什么是iota?
- 命名建议(Naming Things: Recommendations)。
对应仓库:10-constants 的 01-declarations(语法、常量类型与表达式、多重声明)、02-typeless-constants(无类型常量、typed vs typeless、默认类型)、04-iota(手动枚举 vs 用 iota、表达式、空白标识符),练习题覆盖 01-minutes-in-weeks 到 09-iota-seasons 共 9 个。
本层仓库全景:这一层的全部主题分布在 06-variables、07-printf、08-numbers-and-strings、09-go-type-system、10-constants 五个章节中,每个章节都配有大量练习(例如 06-variables/02-declarations/exercises 就有 22 个 .go 练习文件)与测验,是练习密度最大的一层。
第 3 层:控制流与错误处理
这一层的重点是把程序写"活"——根据输入做出判断、循环处理数据、妥善处理错误:
- Pass Me: Create a Password-Protected Program系列全部观看(对应 11-if/02-if-statement/05-challenge-userpass);
- Understand Go's Error Handling系列全部观看(对应 11-if/03-error-handling,含
strconv.Itoa/Atoi与错误处理); - Switch 语句:在 case 条件中使用多值、
fallthrough如何工作、"Parts of a Day" 解决方案、Switch 小结(对应 12-switch 全部 9 节); - 循环:如何
continue一个循环(含 BONUS:调试技巧)、创建乘法表、如何遍历切片、For Range 的简单用法(对应 13-loops,特别是 04-nested-loops-multiplication-table 与 05-for-range)。
仓库配套佐证:判断逻辑的完整实践链在 11-if(布尔运算符 → if/else/else-if → 错误处理 → 短 if),循环相关练习多达 10 组(如 13-loops/exercises/01-sum-the-numbers 到 10-crunch-the-primes),Switch 练习见 12-switch/exercises。
第 4 层:入门级实战项目(建议全部观看)
路线图要求"请观看本部分的所有讲座"。这些项目把前面学到的语法综合成可运行的小型程序,是本仓库最"干货"的沉淀:
| 项目 | 仓库位置 | 技术要点 |
|---|---|---|
| Retro LED Clock(复古 LED 时钟) | 15-project-retro-led-clock | 数组、动画、秒表(5 步递进 + 4 组练习) |
| Empty File Finder(空文件查找器) | 17-project-empty-file-finder | 文件读取、写入、排序优化 |
| Bouncing Ball(弹跳球动画) | 18-project-bouncing-ball | 二维数组、缓冲区、动画帧 |
| Spam Masker(垃圾邮件遮蔽器) | 20-project-spam-masker | 字符串/字节处理、读文件 |
| Text Wrapper(文本自动换行) | 21-project-text-wrapper | 文本处理综合 |
| Lucky Number Game(幸运数字游戏) | 13-loops/06-project-lucky-number-game | 随机化、循环、标签语句 |
| Word Finder(单词查找器) | 13-loops/07-project-word-finder 至 10-word-finder-labeled-switch | labeled break/continue/switch |
这些项目难度递增,恰好衔接下一层的"进阶"内容。
第 5 层:剩余章节(中级到高级)
从这一点开始,你可以观看剩余的全部讲座,它们属于中高级水平,包括:
- 14-arrays(数组基础、字面量、比较、多维数组、键控元素)
- 16-slices(切片 vs 数组、append、切片表达式、底层数组、len/cap、make、copy、多维切片——含 26 组练习)
- 19-strings-runes-bytes(字节/符文/字符串、字符集表、rune 解码、内部机制)
- 22-maps(字典实现、map 填充、内部克隆机制)
- 23-input-scanning(扫描输入、map 作为集合、日志解析器)
- 24-structs(结构体、嵌入、编码/解码 JSON、日志解析器)
- 25-functions(函数基础、按值传递、重构为函数、日志解析器)
- 26-pointers(指针基础、复合类型指针、指针 vs 值语义)
- 以及仓库顶层更进阶的内容:
interfaces/(方法、接口、类型断言、type switch、io)、advfuncs/(可变参数、函数值、闭包、高阶函数、延迟函数、panic/recover)、logparser/(函数式与测试驱动的日志解析器演进)、concurrency/与x-tba/(并发与综合实战)。
三、BONUS:为什么你应该学习 Go?
路线图末尾附带的 BONUS 章节给出了几条关键定位判断:
- 概括而言:"Go 像 Python 和 JavaScript 一样简单,又像 C/C++ 一样快;它比 C/C++ 更令人愉悦,你可以下沉到底层,也可以停留在高层。"
- Go 擅长什么:跨平台命令行工具、分布式网络应用、云技术(微服务与 Serverless)、Web API、数据库引擎、大数据处理流水线、嵌入式开发等;
- Go 不擅长什么(但可以做):桌面应用、操作系统编写、内核驱动、游戏开发等。
Go 被谁在使用?
Go 主要被互联网公司采用:Google、Facebook、Twitter、Uber、Apple、Dropbox、Soundcloud、Medium、Mozilla Firefox、GitHub、Docker、Kubernetes 与 Heroku 等。文档还引用了 Go 官方博客《Eight years of Go》的表述:如今每一家云公司都有用 Go 构建的关键云基础设施组件,包括 Google Cloud、AWS、Azure、Heroku、Alibaba、Cloudflare、Dropbox,以及 Kubernetes、Cloud Foundry、OpenShift、NATS、Docker、Istio、Etcd、Consul、Juju 等开源基础设施。
谁设计了 Go?
Go 由业内最具影响力的人物设计:
| 设计者 | 代表成就 |
|---|---|
| Ken Thompson | Unix |
| Rob Pike | UTF-8、Plan 9 |
| Robert Griesemer | Hotspot JVM(Java 虚拟机) |
用 Go 能做出什么?
文档列举了来自开发者社区的丰富案例(并附原始 Reddit 讨论作为参考),包括:用 Go 编写的网络驱动(相比 C 驱动仅有 10% 的性能损失)、Google gVisor(用 Go 写的用户态内核)、跨平台任天堂模拟器、Docker 容器系统、Kubernetes 容器调度与管理系统、VM 镜像去重工具、聊天服务器、RUM beacon 采集器、时序数据库引擎及其客户端与命令行工具、Map-Reduce 库、集群前端优化反向代理、CDN 节点、健康管理守护进程、纯 Go DNS 服务器、对接 MySQL 的 API 后端、Linux 进程捕获/恢复工具、HTML→PDF 发票转换器、URL 短链服务、短信服务、信用卡支付网关、JWT 包、实时图像处理服务、3D 渲染农场流水线、生产环境 LXC 容器部署与自动化测试管理工具等。
四、给学习者的实践建议(结合仓库结构)
- 先测后学:每个章节的
questions/目录(如 11-if/questions、13-loops/questions)先自测,答不上来再回头补讲座。 - 练习驱动:所有
exercises/目录都提供了main.go(带 TODO 的题面)与solution/(参考答案),例如 06-variables/02-declarations/exercises 下的 22 个练习。建议先独立完成,再对照solution/。 - 逐层通关:严格按路线图五层递进——第 1 层地基、第 2 层类型系统(占比最大)、第 3 层控制流与错误处理、第 4 层项目实战、第 5 层中高级进阶,每层都"看得懂就跳过,看不懂就回来"。
- 善用文档工具:安装 Go 后,用
go doc查阅标准库(02-write-your-first-program 的示例注释演示了go doc -src fmt Println);各章节的安装指南见 01-get-started 下的 osx-installation.md、windows-installation.md 与 ubuntu-installation.md。
适用前提说明:以上内容以本仓库当前实际结构为准(约 1000+ 手写 Go 示例、练习与测验),课程讲解以作者的视频教程为依托;若你的 Go 版本或环境不同,命令细节(如go run .的多文件运行方式)请以本地go version与go help输出为准。
全文依据:01-get-started/programmers-roadmap.md;仓库整体介绍见 README.md。本仓库资料遵循 CC BY-NC-SA 4.0 许可。
- 示例工程
- 教程
【免费下载链接】learngo
❤️ 1000+ Hand-Crafted Go Examples, Exercises, and Quizzes. 🚀 Learn Go by fixing 1000+ tiny programs.
相关推荐
mason-nvim-dap.nvim核心功能解析:自动安装与配置调试适配器的完整指南
mason nvim dap.nvim核心功能解析:自动安装与配置调试适配器的完整指南 mason nvim dap.nvim是一款专为Neovim用户设计的插
从零到精通 Haskell:基于 learnhaskell 仓库的完整学习路线与实战指南
从零到精通 Haskell:基于 learnhaskell 仓库的完整学习路线与实战指南 这是一篇以 learnhaskell 仓库官方中文指南( guide
教程Cycle.js 示例仓库学习指南:从 Hello World 到响应式架构的进阶路线
Cycle.js 示例仓库学习指南:从 Hello World 到响应式架构的进阶路线 本文围绕 Cycle.js 官方仓库中的 examples https:
前端Web框架
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考