Go
Go · 按标签浏览文章(文章数不少于 5 的标签才会单独成页)。
Go 实战:写一个命令行工具
用标准库做一个统计文本行数与最长行的 CLI:flag 解析、按参数读文件或 stdin、bufio 逐行扫描、错误与退出码、子命令结构,以及用 ldflags 注入版本号。
Go 实战:写一个 HTTP 服务
用标准库 net/http 实现 JSON 接口:方法路由、请求解析与校验、统一错误响应、中间件记录日志与请求 ID、超时配置、优雅停机,以及 httptest 验收。
Go context 与取消传播
context 的作用与用法:Background 与 TODO 的取舍、WithCancel/WithTimeout/WithDeadline、ctx 作为首个参数向下传递、select 监听 Done、避免泄漏与不要存进结构体。
Go 泛型入门
类型参数与约束的实用入门:any 与 comparable、自定义约束与 ~ 底层类型、Map/Filter 等通用函数、泛型类型、类型推断,以及什么时候不该用泛型。
Go goroutine 与 channel
并发原语的正确用法:go 与 WaitGroup、无缓冲与有缓冲 channel、close 与 range 的规则、select 与超时、worker pool、Mutex 与 channel 的选择,以及 race detector。
Go 包与模块管理
讲清 module、package 与目录的关系:go.mod 与 go.sum、internal 目录、导出规则、go get 与 go mod tidy、版本选择与 replace,以及常见的循环依赖处理。
Go 性能剖析:用 pprof 找热点
从基准测试产物到生产采样:CPU 与堆 profile 的采集方式、top/list/web 与火焰图的读法、benchstat 对比两次改动,以及 pprof 端点该暴露给谁。
Go 测试与基准测试
用标准库 testing 写表驱动测试:t.Run 子测试、t.Helper 与 t.Cleanup、临时目录、错误断言、基准测试与内存统计、覆盖率与 fuzz,以及测试的组织习惯。
Go 控制流:if、for、switch
说明 Go 为什么只有一种循环、if 的初始化语句怎么用、switch 的默认无穿透行为,以及 range 遍历切片、map 与字符串的区别。
Go 函数与错误处理
讲解多返回值与命名返回值、error 接口的正确用法、fmt.Errorf 的 %w 包装与 errors.Is/As,以及 defer、panic 与 recover 的适用边界。
Go 环境搭建与第一个程序
从安装 Go 1.24 开始,讲清 GOPATH 与模块模式的区别、go mod init / run / build / fmt 的实际用法,并给出最小项目结构。
Go 接口与组合
讲清 Go 接口的隐式实现、小接口原则、类型断言与类型 switch,说明 nil 接口与 nil 指针的区别,以及用组合替代继承的写法。
Go Map 与结构体
讲清 Go map 的声明、comma-ok 取值、删除与并发限制,以及结构体定义、字面量、字段导出规则与嵌入组合的用法。
Go 指针、方法与值语义
解释 Go 指针的取地址与解引用、new 与 & 的区别,讲清值接收者与指针接收者的方法集规则,并给出何时该用指针的判断标准。
Go Slice 和 Array 的区别
对比 Go 数组与切片的内存模型,说明长度与容量的关系、append 扩容规则,以及共享底层数组导致的隐蔽 bug。
Go 变量、类型与零值
讲清 var 与 := 的区别、Go 的零值机制、常量与 iota 的用法,以及数值转换、string 与 []byte、rune 之间的边界。