Go教程技术文章
-
slices.Clip 会把 Go 切片的 cap 收紧到 len,避免后续 append 复用多余容量;但它不复制底层数组,真正要释放长期持有的大数组仍需建立独立副本。478 收藏 -
testing.T.Cleanup 会在当前测试及其子测试完成后执行,多个回调按后注册先执行。本文用 t.Run、t.Name 和事件记录说明父子测试清理归属、注册顺序、并行子测试边界及常见误区。478 收藏 -
用 Go filepath.WalkDir 按扩展名统计普通文件,说明目录内符号链接、错误回调、SkipDir、大小写和根路径链接的边界。478 收藏 -
Go 的 http.NewRequest 不能只看 ContentLength=0 判断 body 是否为空。本文对比 nil、http.NoBody、空 bytes.Reader/strings.Reader 与自定义 Reader,说明 Request.Body、ContentLength、GetBody 的组合语义,并给出可直接复用的判断代码。478 收藏 -
用 Go 的 encoding/hex 把二进制 ID 转成稳定的小写十六进制文本,并说明 DecodeString 的输入边界、错误处理和预分配写法。477 收藏 -
math/big 的 Int 运算通常不会像机器整数一样溢出,异常多出现在 Int64/Uint64 转换、big.Float 精度舍入或接收者复用。本文给出一套可检查的定位方法。477 收藏 -
Go 1.26 放宽了 new 的参数限制,可以直接用 new(expr) 创建带初始值的指针。本文用可选字段、版本门槛和迁移验证说明它解决什么问题,以及什么时候不该急着改写。476 收藏 -
Go 的 slices.SortStableFunc 会在比较结果相等时保留原顺序,适合按单一字段排序又要维护同组先后关系的场景。本文用订单优先级示例拆解比较函数、稳定性和空切片边界。476 收藏 -
用 Go 的 io.TeeReader 把请求体读取和 SHA-256 摘要计算接在同一条流上,说明 io.Copy、Sum 调用时机,以及绕过包装 Reader 时的常见错误。476 收藏 -
用 Go json.Decoder 配合 Token、More 和 Decode 逐项处理大型 JSON 数组,说明不保存全量切片时的内存边界、数字精度和异常处理取舍。476 收藏 -
Go 1.23 的 unique.Handle 可以为可比较值建立全局唯一句柄,适合把重复的不可变配置或标识压缩成便宜的句柄比较。本文从最小示例出发,核对类型约束、Value 的浅拷贝语义、句柄生命周期和缓存命中边界。475 收藏 -
用 go/parser 和 go/ast 只收集 Go 源码中的导出函数声明,区分包级函数与方法,并用 format.Node 保留参数、返回值和类型参数。475 收藏 -
Go archive/tar 不会替你决定是否跟随符号链接。本文用 Lstat、WalkDir 和 tar.Header 演示如何原样归档链接,并在解包前校验目标路径。475 收藏 -
Go testing.T Setenv 会在测试结束后恢复环境变量,但修改过程影响整个进程,因此不能与 t.Parallel 或并行祖先组合使用。本文拆解冲突原因,并给出串行边界、显式配置和子进程隔离三种处理方式。475 收藏 -
当 goroutine 偶发卡住时,runtime/trace 能把任务、日志和调度时间线放到同一份证据里。本文用 trace.NewTask、trace.Logf 和 trace.Start/Stop 建立最小采集程序,再说明如何从任务延迟和阻塞区间定位问题。474 收藏