Go语言技术文章
-
Go 的 hash/maphash 用 Seed 把哈希随机性与具体计算分开。本文通过可运行示例说明 MakeSeed、Seed 复用、Hash.SetSeed 与不可序列化边界,帮助你在内存索引中稳定使用它。265 收藏 -
短超时压测后 Goroutine 数量不回落,不一定都是 Context 失效。本文用 worker pool 拆开工作取消与结果发送两个等待点,给出可执行的 Go 修复写法和 pprof 定位方法。265 收藏 -
Golang · Go问答 | 3星期前 | 错误处理 · go · Go errors.As errors.As 指针目标 errors.As 非指针类型 Go 错误链匹配 Go Error 接收者
围绕 Go errors.As 的指针与非指针目标写法,解释 Error 接收者、%w 包装、接口目标和常见 panic 边界,给出可直接套用的判断表与代码示例。265 收藏 -
filepath.Clean只能规范化路径字符串,不能证明文件仍在允许目录内。本文用 filepath.Rel 做词法范围判断,再说明符号链接、绝对路径和并发替换的防护边界。265 收藏 -
用 Go tls.Config.GetCertificate 根据 SNI 动态选择证书,覆盖精确匹配、通配符、默认回退、并发读取与热更新边界。265 收藏 -
Go 测试中 t.Parallel 与 t.Setenv 不能直接混用。本文用串行父级、配置注入和串行分组三种组织方式,解决全局环境变量影响并行子测试的问题。265 收藏 -
讲清 Go bufio.Reader.Peek 预读固定协议头时的参数、缓冲区和切片生命周期边界,并用 8 字节 TCP 协议头示例处理 ErrBufferFull、截断输入、长度校验与安全消费。265 收藏 -
unsafe.Pointer 转换只改变地址视图,不会自动延长 Go 对象生命周期。本文从外部同步调用和对象可达性断点说明 runtime.KeepAlive 的正确位置,并区分 C 代码跨调用保存 Go 指针时的 Pinner、C 内存和 cgo.Handle 方案。264 收藏 -
Go generate 执行指令时,生成器的工作目录是包含该指令的包源目录,而不是你启动 go 命令的仓库根目录。理解这个基准后,就能稳定处理 schema、模板、输出文件和仓库级生成器的相对路径。264 收藏 -
Go 1.24 的 time.Time.AppendText 可以把 RFC 3339 时间直接追加到复用的 []byte。本文说明如何在循环和写入路径中复用缓冲区、处理错误与字符串转换,并用 benchmark 判断分配是否真正下降。264 收藏 -
Golang · Go问答 | 1个月前 | 并发 · golang · 错误处理 · Context · Go问答 · Go 错误处理 Go问答 context.WithCancelCause context.Cause context.Err
Go 并发任务被取消时,ctx.Err() 只能告诉你是取消还是超时,context.Cause(ctx) 才能保留业务失败原因。本文用一个可运行的任务链说明 Cause、Err、errors.Is 和错误包装各自负责什么。263 收藏 -
线上接口延迟升高时,goroutine 画像能帮助定位到底是 channel、锁还是外部调用在等待。本文从可见症状开始,结合 runtime/pprof 的 goroutine 采样、状态分类和可复现验证,拆出一条不靠猜的排查路径。263 收藏 -
io.ReaderAt 的 ReadAt 可能同时返回已读字节和 io.EOF。本文用可运行示例拆开 n、len(p) 与 err 的判断顺序,说明文件尾、部分读取和完整读取时的安全处理方式。263 收藏 -
Go 的字符串按字节保存,同一个可见字符可能有预组合和组合字符两种 UTF-8 表示。本文用 golang.org/x/text/unicode/norm 判断 NFC、统一输入,并解释规范化前后的字节长度边界。263 收藏 -
Go 的 FormatFloat 和 printf 只能控制浮点数的显示格式,不能把二进制 float64 变成精确十进制。本文用 0.1+0.2 说明误差来源,并比较展示格式、整数最小单位和高精度十进制三种处理方式。263 收藏