Go语言技术文章
-
Golang · Go问答 | 2个月前 | 并发 · 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 收藏 -
用 Go testing.T.TempDir 为文件测试建立独立临时目录,理解自动清理、并行子测试隔离、路径派生和 GOTMPDIR 的边界。263 收藏 -
Go 按平台拆分文件时,文件名后缀本身就是构建约束;本文说明 GOOS、GOARCH、//go:build 的叠加关系,并用 go list 查看实际入选文件,排查同名实现冲突和跨平台测试遗漏。263 收藏 -
Go slices.Clip 会把切片容量收紧到长度,但不会复制元素或立即释放底层数组。本文从三索引切片、append 隔离、长期持有和 Clone 对比四个场景说明什么时候值得调用。263 收藏 -
go vet 的 printf 检查可以在编译前发现格式化动词与参数数量、类型不匹配的问题。本文用最小示例解释诊断信息、修复方式,以及自定义日志包装函数如何接入检查。263 收藏 -
Go 的 json.Decoder 调用 UseNumber 后,动态 JSON 数字不再是默认的 float64,而是 json.Number。本文解释类型断言失败的原因,并给出大整数、整数和浮点数的迁移写法。263 收藏 -
Go sync.WaitGroup 的 Done 少调用一次时,Wait 为什么会一直等待?本文用批处理示例说明任务计数、defer Done、提前返回和 Add/Done 配对的排查方法。263 收藏 -
讲清 Go errors.As 如何穿过 %w 包装错误提取自定义类型,说明指针目标的正确写法、false 与 panic 的边界,以及错误链在业务工作流中的接入方式。263 收藏 -
Go database/sql 遍历结果集时,Rows.Next 返回 false 可能是正常耗尽,也可能是驱动或 context 错误。本文拆分 Scan、Rows.Err 和 Close 的职责,并给出可复用查询函数写法。263 收藏 -
Go 的 hash.Hash.Sum 会把当前摘要追加到传入切片,并且不改变哈希状态。本文用 sha256 示例说明 nil、前缀、容量复用和继续 Write 的正确写法。263 收藏 -
Go Context 适合携带 trace ID、请求来源等请求级元数据,不适合隐藏订单号、分页条件等业务参数。本文用类型安全的 WithValue 写法、显式 API 参数和取消传播示例说明边界。263 收藏