Go语言技术文章
-
Go 覆盖率不只看总百分比:用 go test 生成 cover.out,再用 go tool cover -func 按函数查看文件、语句数和覆盖率,快速定位该补哪组测试。336 收藏 -
Go sync.Pool 的 Get 不保证返回刚 Put 的对象,池内元素也可能被自动移除。本文用最小代码说明 Get、Put、New 的边界,并给出复用临时对象时的排查清单。336 收藏 -
用 filepath.Rel 计算相对目录深度,在 filepath.WalkDir 回调中通过 filepath.SkipDir 截断超出层级的目录子树,并说明错误处理、符号链接和跨平台路径边界。336 收藏 -
Go 处理大文件上传时,不要直接把请求体读进内存。本文用临时文件串起流式写入、大小校验、SHA-256 校验和原子替换,说明每一步为什么存在,以及失败时怎样清理。335 收藏 -
Go 1.24 完整支持带类型参数的别名声明。本文用一个从 legacy 包迁移到 collection 包的 Set API,比较 type 定义与 type 别名的差异,说明方法、导出类型、go.mod 版本和工具链兼容边界。335 收藏 -
Go 1.27 的 go/ast.PreorderStack 在遍历语法树时同时提供当前节点和父节点栈,适合判断嵌套函数、块作用域与调用位置。本文用一个可运行示例说明调用链、栈内容和边界处理。335 收藏 -
Go 1.26 将此前实验性的 Green Tea 垃圾回收器设为默认。升级后不能只看单次压测数字,本文从适用场景、指标基线、最小验证和临时回退开关整理一套可落地的检查方法。334 收藏 -
调用 context.WithCancel 后,goroutine 仍然不退出,通常不是 cancel 失效,而是工作循环没有监听 Done 或被阻塞在不可取消的操作上。本文用最小代码复现问题,再通过 pprof、日志和退出计数定位原因,给出可回归的修复方式。334 收藏 -
bytes.Buffer.Reset 会清空可读数据,却保留底层存储。本文用容量、切片别名和并发边界说明复用何时有益、何时会让大块内存长期驻留。334 收藏 -
用一个最小 HTTP 服务演示 Go 的 http.NewResponseController 如何统一调用 Flush 和 Hijack,并核对包装器与 HTTP/2 不支持时的错误边界。334 收藏 -
Go 的 crypto/cipher.NewGCMWithRandomNonce 会为每次 Seal 自动生成 12 字节 nonce,并把 nonce 放在返回密文的最前面。本文用同一个 AES-GCM 示例核对密文布局、Open 的切片方式、附加数据校验和旧代码迁移边界。334 收藏 -
Go JSON 指针字段设为 nil 后仍输出,通常是因为标签没有 omitempty,nil 会被编码为 null。本文从最小结构体、标签检查、接口契约和自定义 MarshalJSON 四个方向定位原因。334 收藏 -
用 Go atomic.Pointer[Config] 发布不可变配置快照,说明 Store、Load、切片复制、map 隔离和多字段一致性的工程边界。334 收藏 -
sql.Conn.Raw 能让 Go 程序临时访问驱动连接,但回调结束后 database/sql 只根据返回错误判断连接是否还能用。本文解释修改驱动状态后的复用风险,以及何时应返回 driver.ErrBadConn。334 收藏 -
Golang · Go教程 | 2星期前 | Go教程 · 输入校验 · Go math/big.Int.SetString Go 大整数进制解析 SetString 返回值判断 Go 输入校验 big.Int 字符串转换
讲清 Go math/big.Int.SetString 的成功与失败返回值、base=0 前缀规则、固定进制的常见误判,并给出安全处理非法输入的完整示例。334 收藏