Go问答技术文章
-
Go Transport 配置看似未生效,需区分旧实例归属、连接复用和配置作用阶段。结合客户端工厂与顺序切换示例,说明不可变配置、响应体排空、闲置连接回收及热更新的失败边界。269 收藏 -
Go 中无缓冲 channel 的发送必须等接收方出现;如果调用方提前 return,发送 goroutine 就可能永久阻塞。本文用最小示例解释泄漏原因,比较缓冲与取消方案,并给出 goroutineleak/pprof 的排查思路。269 收藏 -
从 Shutdown 的等待语义、活跃请求、慢操作和长连接边界出发,定位 Go HTTP 服务退出迟迟不返回的原因,并给出带超时的退出编排方式。269 收藏 -
连续调用 Go json.Decoder.Decode 时,io.EOF 表示没有下一个顶层 JSON 值,不等于输入损坏。本文区分正常收尾、空白尾部、截断 JSON、语法错误和类型错误,给出可复用的判断分支。269 收藏 -
range over function 是 Go 1.23 才支持的语言语法。本文用最小迭代器示例说明旧版编译器为何无法靠升级依赖获得这项能力,并给出升级工具链、callback 回退和构建约束的选择。269 收藏 -
Go database/sql 的 DB.Stats 会累计记录连接池等待次数和等待时长。本文说明 WaitDuration 的真实含义,如何用两个快照计算窗口增量,以及怎样把连接池排队和 SQL 执行慢分开判断。269 收藏 -
Go 的普通 uint64 乘法只保留固定宽度结果。本文用 math/bits.Mul64 拆出 128 位乘积的高、低 64 位,给出可复用封装、溢出判断、结果格式化和边界说明。269 收藏 -
Go 的 G[int] 只有一个方括号表达式,解析器会把它表示为 ast.IndexExpr;只有逗号分隔的多个参数才使用 IndexListExpr。本文说明两类节点的字段差异,以及如何用 go/types.Info.Instances 补充泛型语义。269 收藏 -
Go JSON 时间字段解析失败,应先区分 JSON 类型、RFC3339 格式与时区契约。结合标准字段和旧格式输入示例,说明 ParseInLocation、空值、必填检查及常见格式误区。268 收藏 -
不同包的同名未导出字段具有不同名称身份。通过 go/types 对照例子,说明 Name、Id、Identical 的职责,以及包路径、字段标签和符号集合一致性。268 收藏 -
客户端断开后 Handler 未退出,应区分请求取消尚未被观察到与业务未响应取消。本文通过最小本地 HTTP 服务说明 Context 传递、业务退出、代理边界和超时预算,不把客户端报错等同于后端停止。267 收藏 -
Go strings.Split 返回空元素通常不是异常,而是前置、连续或尾部分隔符保留了空字段位置。本文结合代码说明 Split、空分隔符与 Fields 的边界,并给出保留或过滤空字段的判断清单。267 收藏 -
go mod tidy 升级后出现依赖增删、go.sum 变化或程序行为不同,不要直接回滚。本文按基线、diff、模块图、工具链和分层复现五步定位变化来源,并给出可提交的判断标准。267 收藏 -
Go HTTP2Config.StrictMaxConcurrentRequests决定HTTP/2流额度满时等待还是增加连接。文章对比两种策略,给出客户端配置示例,并区分流额度、连接预算与业务并发限制。267 收藏 -
Go 的 os.File.Truncate 只改变文件长度,不会自动调整当前 I/O 偏移。本文用代码拆开 Truncate、Seek、Write 和 WriteAt 的职责,解决截断后 EOF、追加和固定位置覆盖的常见误判。267 收藏