Go问答技术文章
-
Go 1.27 支持具体类型声明泛型方法,但类型参数只出现在返回值时,方法调用仍可能无法完成类型推断。本文给出显式类型实参、目标指针、解析回调和具体包装方法四种改法,并说明规模化 SDK 的取舍。355 收藏 -
Go 普通 map 不能直接承受并发读写,运行时 panic 只是可能出现的表现。本文用一个小缓存说明 map 并发边界,比较 RWMutex 与 sync.Map,并把 go test -race 放进回归验收。354 收藏 -
从 DB.Stats 指标、Rows 生命周期和提前退出分支入手,定位 Go database/sql 连接耗尽,并给出可复用的关闭与防复发写法。354 收藏 -
runtime.GoroutineProfile 的记录数会随 goroutine 创建和退出而变化。本文比较一次分配、带余量的有界重试和 runtime/pprof,给出容量上限、重试上限、records[:n] 截断与失败处理写法。354 收藏 -
Go 接口字段既可能缺失,也可能显式传 null。本文说明普通值和单层指针为何不足,并给出 Optional[T] 三态模型、PATCH 更新规则、响应编码方式、失败处理及测试清单。354 收藏 -
Go slog 日志量过大时,先用 LevelVar 和 HandlerOptions.Level 过滤低价值日志,再对可聚合的成功事件做带键采样;错误、审计和关键状态变化保持全量保留。354 收藏 -
archsimd 目标实现是否被选中取决于 GOEXPERIMENT=simd、目标 GOARCH、文件名隐式约束和显式 //go:build 的共同结果,运行时 CPU 特性检查不会改变已编译文件。354 收藏 -
Go flight recorder 的缓冲区太小时不会按事件类型选择性丢弃,而会淘汰较老的完整 trace generation。本文解释 MaxBytes 与 MinAge 的优先级、会缺失的上下文及容量配置方法。354 收藏 -
Go map 的 range 顺序不保证稳定。本文用排序后的键值表示和顺序无关断言,说明如何写出可重复、能覆盖边界的 map 测试。352 收藏 -
http.Client.Timeout 限制的是一次请求从连接到读取响应体的总时长,不会替调用方管理 Response.Body。本文区分 Close、读到 EOF、连接复用和慢流场景,给出可直接套用的清理写法。352 收藏 -
strings.Builder 首次写入后会记录自身地址;按值复制会让副本携带旧地址,后续 Write 或 Grow 被 copyCheck 判定为非法复制并 panic。修复应改用单一所有者、指针传参或返回字符串。352 收藏 -
Golang · Go问答 | 4星期前 | 错误处理 · net/http · HTTP客户端 · Go问答 · Go clienttimeout http.Client Timeout Go 请求超时 Go url.Error 超时 Go HTTP 客户端时限
Go 的 clienttimeout 通常对应 http.Client.Timeout。本文说明它覆盖的请求范围、如何从 client.Do 返回值中判断超时,以及它与 context 和 Transport 分段时限的区别。351 收藏 -
解释 Go crypto/rand.Read 的完整填充保证,并用 io.ReadFull 处理自定义 Reader 或通用 io.Reader 的短读,避免把不足字节的数据误当成完整令牌。351 收藏 -
从 WaitGroup 计数器、Add、Done 与 Wait 的关系出发,解释负数 panic、Wait 早退和批次复用的边界,并给出稳定的 Go 并发写法。351 收藏 -
Go http.Transport 设置 DisableKeepAlives 后吞吐下降,通常是连接复用被关闭,重复承担建连、TLS 握手和连接调度成本。本文解释它与 TCP keepalive 的区别,并给出复用、限额和清理空闲连接的配置取舍。350 收藏