Go问答技术文章
-
Go benchmark 第一次结果特别慢时,先区分一次性初始化和被测操作,再用 ResetTimer 或 B.Loop 管理计时边界,避免把准备成本误判为性能回归。246 收藏 -
解释 time.Timer.Stop 返回 false 在 NewTimer 与 AfterFunc 中的不同含义,区分 Go 1.23 同步计时器通道与旧语义,并给出避免重复处理到期事件的收尾方式。246 收藏 -
Go 1.26 新增的 Transport.NewClientConn 可以创建不进入 Transport 连接缓存的独立客户端连接。本文说明 scheme、address、ClientConn.RoundTrip、状态读取和关闭责任,并对比普通 http.Client.Do 的适用场景。246 收藏 -
Go bytes.Buffer Grow 会预留后续写入所需的容量,但不会直接增加 Len。本文用已知长度和未知长度两种场景说明如何减少重复扩容,并梳理负数、过大参数、Reset 复用与并发访问边界。246 收藏 -
Golang · Go问答 | 3星期前 | CGO · 垃圾回收 · Go问答 · Go CGO runtime.KeepAlive runtime/cgo.Handle runtime.Pinner Go指针回收
Go cgo 场景里,runtime.KeepAlive 只能把 Go 对象的可达性延长到指定位置,不能允许 C 在调用返回后继续保存普通 Go 指针。本文按同步调用、异步保存和 Go 值传递三个边界,说明 KeepAlive、Pinner、cgo.Handle 与 C 内存的选择。245 收藏 -
Go 1.27 调整了 go tool trace 的 -http 参数行为:只写端口时页面限制在 localhost。本文对比常见监听地址,说明本机查看与远程访问该怎么选。245 收藏 -
io.LimitReader 在达到上限后也会返回 EOF,因此单看 EOF 不能判断底层数据是否自然结束。本文解释 LimitedReader.N 的含义,并用 limit+1 的受控读取方式识别输入是否超限。245 收藏 -
Go Avro schema 中的 default 主要服务于读取旧数据时的 schema resolution,并不是编码器的可选字段开关。本文结合 hamba/avro/v2 说明 writer schema、reader schema、union 默认值和新增字段的兼容边界。245 收藏 -
Go csv.Reader 遇到列数不一致时,把 FieldsPerRecord 设为 -1 即可保留每条解析后的 []string;文章同时说明严格模式、ErrFieldCount、ParseError 和 ReuseRecord 的处理边界。245 收藏 -
Go image.Decode 得到空结果时,优先检查错误、格式注册和 Reader 读取位置。本文用最小示例说明空输入、未注册解码器、预读后未回退和 DecodeConfig 尺寸边界的处理方式。245 收藏 -
Go encoding/json 解码到 map[string]any 时,JSON 数字默认映射为 float64。本文用最小复现解释原因,并给出结构体与 Decoder.UseNumber 两种保留数字语义的处理方式。245 收藏 -
Go context 取消后任务仍在运行,通常不是 cancel 失效,而是 goroutine 没有监听 Done、阻塞调用没有接收 context,或收尾阶段被结果通道卡住。本文用循环、数据库调用和排查清单拆开这条边界。244 收藏 -
Go net/http 的 Server.Protocols 为空时采用默认协议集合;如果服务端只需要 HTTP/1,应显式创建 http.Protocols 并调用 SetHTTP1(true),不要把 nil 配置误认为仅 HTTP/1。本文说明配置写法、集合语义和常见误区。244 收藏 -
Go Timer Stop 后仍收到事件,先看 Stop 返回值、Go 版本和 C 通道的接收者。本文说明旧版本的非阻塞排空、Go 1.23 之后的同步语义,以及 Reset、多个接收者和 AfterFunc 的处理边界。244 收藏 -
Go 本地 replace 不生效时,应核对主模块、模块身份、版本范围、本地目录基准及 go.work 覆盖。本文用双模块联调配置说明排查方法和迁回正式依赖前的收尾事项。244 收藏