这是一份会长期更新和完善的 Go 学习指南和面试专题,会逐步进行完善。
欢迎到【公众号】获取最新文章或加我 【微信】提意见(记得 Star),可倒推煎鱼更新,感谢各位。
Go 学习路线图
Go 学习指南
- Go 语言入门系列:初探 Go 项目实战(含 gin、grpc、grpc-gateway 实战)
- Go 语言编程之旅:深入用 Go 做项目
- Go 语言设计哲学:了解 Go 的为什么和设计思考
- Go 语言进阶之旅:进一步深入 Go 源码
Go 模块管理
Go 面试专题
基本理解
调度模型
- GMP 模型,为什么要有 P?
- Go 结构体是否可以比较,为什么?
- 单核 CPU,开两个 Goroutine,其中一个死循环,会怎么样?
- 进程、线程都有 ID,为什么 Goroutine 没有 ID?
- Goroutine 数量控制在多少合适,会影响 GC 和调度?
- 详解 Go 程序的启动流程,你知道 g0,m0 是什么吗?
- Goroutine 泄露的情况有哪些?
- Go 在什么时候会抢占 P?
- 会诱发 Goroutine 挂起的 27 个原因
数据结构
interface
defer
map/slice
常见坑
代码调试
官方资料
常用软件
福利
待完善中...
Go 历史版本特性
1.21
- slices、maps 泛型库
- for 循环变量的语义变更
- context 可设置取消原因和回调函数
- 主版本号支持第三位数字 0
- 统一标准 log/slog
- 支持自定义 go.env 文件
- 增强约束 Go 程序构建
- 新内置函数和标准库 clear、min、max、cmp
- panic(nil) 成为历史
- 结束对 macOS 10.13/10.14 和 Windows 7/8、Server 2008/2012
- 进一步支持 WASI
1.20
- 两个关于 Time 的更新,不用背 2006-01-02 15:04:05 了
- 手动管理内存:arena 来了
- arena 能手动管理内存了,怎么用
- PGO 是啥,咋就让 Go 更快更猛了
- 小修小补 errors 库 Unwrap
- 禁止匿名接口循环导入
- 修改全局变量的初始化顺序
- SliceHeader 和 StringHeader 将会被废弃
1.19
1.18
- 多 Module 工作区模式
- 编译后的二进制文件,将包含更多信息
- 新增好用的 Cut 方法
- 引入新的 netip 网络库
- 被折腾 N 次的 TryLock
- 弃用 strings.Title 方法,换个新坑吧!
- 高效复制,strings, bytes 标准库新增 Clone API
1.17
- 支持切片转换为数组指针
- 支持泛型了?具体怎么用
- 支持模糊测试(Fuzzing)
- 增强构建时的编译约束
- 优化 modules:支持模块依赖图裁剪、延时模块加载
- 优化基于寄存器的函数参数和结果传递
- 优化恐慌所抛出的异常堆栈信息
1.16
我的公众号
所有文章和最新进度,请关注:
关注公众号后,可回复 002 可获取我的个人微信号。
我拉你进 Go 读者交流群,连接数千位 Go 爱好者,共同学习和进行技术交流!