Go语言技术文章
-
Go 的三索引切片 a[low:high:max] 会把结果容量固定为 max-low。把 data[:len(data):len(data)] 传给下游后,append 无法复用调用方的额外容量,但已有元素仍可被修改。245 收藏 -
Go bufio.Reader 的 UnreadByte 只能回退最近一次成功读取的一个字节;Peek、Discard 和 WriteTo 不会建立可回退状态,回退成功后也不能再次调用。把试探读取封装为 ReadByte、判断、必要时单次回退的连续协议,可避免缓冲位置错乱。245 收藏 -
用 Go sort.Search 在升序切片中查找 lower bound 插入点,处理重复值、首尾边界和切片扩容移动。245 收藏 -
Go 的 url.QueryEscape 把空格编码成加号,是查询参数采用 application/x-www-form-urlencoded 兼容语义的正常结果。本文通过最小实验说明空格、加号和 %20 的区别,并对比 QueryEscape、PathEscape 与 url.Values.Encode。245 收藏 -
本文解释 cgo 中 C 代码为什么不能随意长期保存 Go 指针,并对比 runtime/cgo.Handle、runtime.Pinner 与 C 自有内存三种安全方案。245 收藏 -
Go 的 crypto/subtle.ConstantTimeSelect 适合在两个整数结果之间做常量时间选择,但它不能替代完整的密码学实现。本文从掩码、输入约束、编译验收和错误用法说明它的边界。244 收藏 -
用 Go runtime/trace 的 Task、Log 和 Region 标记一次异步请求,把采集、查看与代码验证串起来,帮助定位跨 goroutine 的阶段耗时和事件顺序。244 收藏 -
Go 泛型约束并不会自动继承所有类型实参的方法。本文用类型集、方法集和指针接收者示例说明哪些调用能写、哪些必须补进约束。244 收藏 -
Golang · Go教程 | 3星期前 | 单元测试 · testing · Go教程 · 问题排查 · Go test 测试辅助函数 Go testing.T.Helper 失败位置 单元测试排错
testing.T.Helper 不会修复断言失败,它只让 Go 测试输出跳过辅助函数并指向调用处。本文从调用顺序、嵌套 helper、顶层测试函数和 goroutine 边界入手,给出排查失败位置仍指向 helper 文件的最小检查清单。244 收藏 -
Go archive/tar 读取中文文件名乱码时,先区分 PAX/USTAR 的格式能力与旧系统字符集转换,再用 UTF-8 校验、明确编码转换和跨工具样本测试稳定处理。244 收藏 -
Go 1.24 为基准测试增加 testing.B.Loop,能替代手写 b.N 循环,让每次基准运行只做一次昂贵的准备和清理,也减少循环体被编译器过度优化的机会。本文对比旧写法,演示迁移步骤,并说明基准数据变化时该怎么判断。243 收藏 -
解释 Go strings.Builder.Grow 的保证范围、容量与已写入字节的关系,以及 String 返回值和后续写入之间容易误判的边界。243 收藏 -
Golang · Go教程 | 1个月前 | 并发 · pprof · 故障排查 · Go教程 · net/http/pprof goroutineleak goroutine 泄漏 runtime/pprof Go 1.27
Go 1.27 将 goroutineleak profile 正式带入 runtime/pprof 和 net/http/pprof。本文从一个被 channel 永久阻塞的最小案例出发,演示如何采样、判断可疑协程,并说明全局变量和可运行协程为什么会造成漏报边界。243 收藏 -
围绕 strings.CutLast 的空分隔符、未命中和末尾分隔符场景,解释 found 返回值与 LastIndex 兼容实现的判断边界。243 收藏 -
Go 的 url.ParseQuery 遇到非法百分号时不会只返回空结果:它仍会给出非 nil 的 Values,保留可解码的查询参数,同时返回首个解码错误。本文拆开这个边界,并给出严格拒绝与安全降级的选择方法。243 收藏