Go教程技术文章
-
使用 Go mod graph 精确筛选目标模块的全部父依赖,并结合 go list -m 与 go mod why 区分版本要求、实际选中版本和包导入路径,说明依赖调整前后的记录方法与升级判断边界。142 收藏 -
用 go test -cover 建立按包基线,再用 coverprofile 与 go tool cover 定位函数盲区,并区分默认包内统计和 -coverpkg 跨包统计。262 收藏 -
测试依赖用户主目录的 Go 代码时,先按平台选择 HOME 或 USERPROFILE,再用 t.TempDir 与 t.Setenv 注入临时路径,并覆盖空值错误分支。本文给出可复用的断言结构和 Cleanup 边界。231 收藏 -
Go -race 只能发现运行时真正触发的竞态,而且典型开销明显高于普通测试。本文把 CI 拆成快速层、并发重点层、全量竞态层和长链路层,说明如何配置 -p、-parallel、GOMAXPROCS,并区分真实竞态与资源型失败。393 收藏 -
Go 中 filepath 面向当前操作系统的本地文件路径,path 面向固定使用斜杠的 URL 路径。本文用同一组输入对比两者的职责、Windows 盘符风险、资源地址拼接和跨平台落地方式。115 收藏 -
Go json.Decoder 可能提前从底层 Reader 读取数据,Decode 返回后仍有一部分字节停留在内部缓冲。本文说明 Buffered 的准确边界、如何和底层 Reader 余量拼接,以及为什么下一次 Decode 或 Token 后不能继续依赖旧 reader。484 收藏 -
Go io.Pipe 是没有内部缓冲的同步内存管道:PipeWriter.Write 会等到 PipeReader 消费数据后才完成。本文从生产者消费者串流出发,说明正常关闭、CloseWithError、读端取消与背压边界。228 收藏 -
Go netip.Prefix Overlaps 用来判断两个 CIDR 网段是否存在共同 IP。本文从 ParsePrefix 和 Masked 开始,说明 IPv4、IPv6、零值前缀、非法输入与 Contains 的区别,并给出可复用的 Go 封装。419 收藏 -
Go channel 的关键不是记住 close 语法,而是把关闭责任交给唯一知道最后一次发送已经完成的 owner。本文说明单生产者、多生产者汇聚、range 退出、重复关闭与取消信号的边界设计。116 收藏 -
从共享状态边界出发,对比普通 map 配合 Mutex、RWMutex 与 sync.Map 的适用条件,再用竞态检测、吞吐和延迟指标复查选择。198 收藏 -
用可选 Sender 示例解释 Go 接口为何会携带 nil 指针,区分接口比较、类型断言和对象可用性,并通过构造函数明确缺席时的 nil 返回约定。380 收藏 -
Go 泛型排序的关键不是把所有类型都塞进 any,而是用 type set 明确比较能力。本文从 Price、ProductName 等业务命名类型出发,说明 ~ 底层类型约束、< 与 > 的适用边界,并给出标量排序与结构体字段排序的选择方法。323 收藏 -
用 Go slices.Replace 替换切片的半开区间,掌握替换元素数量变化时的长度计算、底层数组复用和越界边界。394 收藏 -
Go go.mod 中的 go 行声明模块可接受的最低 Go 版本,toolchain 行声明开发时更倾向使用的工具链;GOTOOLCHAIN 决定是否自动切换。文章从实际协作场景出发,给出配置、排查和 CI 固定版本的方法。281 收藏 -
Go 1.21 起,bytes.Buffer.AvailableBuffer 可以把当前可用容量交给一次短字段追加,再通过紧接的 Write 提交。本文说明它与普通 Write、strings.Builder 的选择边界,以及返回切片的生命周期。245 收藏