Go语言技术文章
-
Go test 报 internal package not allowed 或找不到内部包时,关键不是测试命令本身,而是导入者是否位于 internal 父目录树内。本文用目录、module 和测试包名拆出根因与修复方式。314 收藏 -
Golang · Go问答 | 1星期前 | HTTP · go · Context · net/http · Go net/http Transport goroutine泄漏 context取消 DialContext
自定义 http.Transport.DialContext 时,只有把请求 Context 传到真正可取消的等待点,才能避免连接 goroutine 长期滞留。本文用一个小型拨号器说明 net.Dialer.DialContext、自定义名额等待、Transport 接入、错误适配和 trace 排查的边界。314 收藏 -
Go CookieJar 跨子域会话异常应区分拒收与目标筛选,结合表驱动测试检查 Domain、Path 和 Secure,并明确 SameSite 的浏览器边界。314 收藏 -
实现 fmt.Formatter 时,内部再次格式化原类型会重新进入 Format 方法。本文用基础类型转换和无方法类型拆开调用链,并说明 verb、flag 与嵌套字段的安全边界。314 收藏 -
strconv.ParseUint 不接受前导加号或负号。通过批量大小命令行示例,区分符号策略、固定十进制、位宽范围与业务区间,并说明语法错误、范围错误和旧协议加号兼容的处理方式。314 收藏 -
Go 1.27 的 go fix unsafefuncs 可以把可识别的 unsafe 指针算术迁移为 unsafe.Add 函数调用。本文说明怎样先用 -diff 预览,再检查字节偏移、对象边界、生命周期和旧工具链兼容性。314 收藏 -
Go encoding/json/v2 默认不给 time.Duration 分配 JSON 表示,直接编码会得到 SemanticError。本文用 FormatDurationAsNano(true) 让它以纳秒数 JSON number 编解码,并梳理嵌套字段、字符串数字与 v1 兼容边界。314 收藏 -
Go 用较短内容覆盖旧文件时不会自动删除尾部字节,使用 os.File.Truncate 按新长度截断,并注意文件偏移、写权限和并发边界。314 收藏 -
Go 泛型函数里,类型参数能否调用方法取决于约束是否明确声明该方法,而不是具体类型本身是否拥有它。本文用最小代码拆开类型集合、方法集和接口约束的边界。313 收藏 -
Go 的 os.Rename 遇到跨文件系统路径时可能返回 invalid cross-device link。稳妥做法是在目标目录创建临时文件,用 io.Copy 完成复制并关闭后,再在目标文件系统内 Rename,最后成功才删除源文件。313 收藏 -
Go 的 os/exec 不需要把命令拼成一整行:将程序名和每个参数分别传入,带空格的路径就能保持完整,再按场景选择 Output、CombinedOutput 或 StdoutPipe,并用 Wait 完成回收。313 收藏 -
解释 Go 高频循环中反复调用 time.After 的分配与回收边界,区分 Go 1.23 前后的定时器语义,并给出可复用 Timer 的 Stop、排空和 Reset 写法。313 收藏 -
用 Go testing.F 为字符串解析器添加少量边界种子,区分预期的解析错误与真正的不变量破坏,并让 fuzz 失败输入沉淀到 testdata/fuzz/FuzzParseRecord,成为可重复执行的回归样本。313 收藏 -
Go io.CopyBuffer 的缓冲区不是越大越快。本文从 WriterTo/ReaderFrom 复制路径、32 KiB 基线、并发内存预算和错误边界出发,说明如何选择 32、64 或 128 KiB,并给出可复用的文件复制示例。313 收藏 -
使用 Go net/url 生成签名查询串时,统一 Values.Encode、参数排序、重复键策略和 RawQuery,避免空格、加号与二次编码造成验签不一致。313 收藏