Go问答技术文章
-
Go 1.22 及以上可在 ServeMux 中注册命名通配符,并用 Request.PathValue 读取路径参数。本文区分单段参数与剩余路径,说明空值排查、转义边界和旧版兼容检查。499 收藏 -
解释 Go HTTP 客户端总超时与 Transport 阶段超时的覆盖范围,说明 DNS、TCP、TLS、响应头和响应体分别该由什么配置控制。499 收藏 -
go.mod 的 replace 指向 ../local-module 时,开发机能编译并不代表发布环境也能找到该目录。本文从模块图和构建上下文解释失败原因,并给出 go.work、本地模块版本和发布前检查清单。499 收藏 -
Go encoding/json 默认会转义 JSON 字符串中的 HTML 特殊字符。本文用 Encoder.SetEscapeHTML(false) 对比 HTML 嵌入、API、日志和签名文本场景,说明关闭转义的正确边界。499 收藏 -
Go 中 bufio.Scanner 读取长日志时看起来只返回前一部分内容,通常是 token 超过默认缓冲上限后 Scan 停止。本文从 Err 检查、Buffer 配置、字节上限和 Reader 替代方案四个层面给出排查方法。499 收藏 -
Go 的 hash.Hash32 与 hash.Hash64 仍通过公共 Hash 接口提供 Sum(b []byte) []byte,同时用 Sum32 和 Sum64 返回数值摘要。本文拆解接口分层、前缀追加语义和字节序选择。499 收藏 -
Go 的 sync.Map.Clear 可以一次清空映射中的全部条目,但它只适合明确的批量失效场景。通过并发读写示例、基线测量和结果核对,说明 Clear 的可见性、成本与替代方案。498 收藏 -
time.Ticker.Stop 只停止后续计时,不会关闭 ticker.C。本文用可复现的 Go 代码说明停止、退出和取消之间的边界,并给出不会卡住的定时任务收尾写法。498 收藏 -
Server.ConnContext 只在新连接建立时修改连接级上下文,之后同一连接上的请求会继承它。本文用最小 HTTP 服务追踪 BaseContext、ConnContext、Handler 的调用顺序,并说明连接复用、HTTP/2 与清理逻辑的边界。498 收藏 -
Go 处理 gzip 时要同时限制压缩输入和解压输出。本文用 io.LimitReader(maxOutput+1) 识别超限,并说明多成员、EOF、校验和与资源释放边界。498 收藏 -
Go test 中 -count=1 会绕过成功测试缓存并实际执行一次;-count=0 则把普通测试、基准和 fuzz seed 的运行次数设为零,不能用来验证测试逻辑。本文对比两者与 (cached)、测试二进制、Examples 和 CI 排查的关系。498 收藏 -
Go 流式处理最容易留下 goroutine 泄漏的地方,是只取消一端却没有唤醒另一端。本文用 context、io.Pipe、CloseWithError 和底层 ReadCloser 组合出一套双端退出方案。498 收藏 -
用 Go 标准库 net/http 的 ResponseController.Flush 实现分段响应,结合 httptest 验证首段数据何时可读,并说明 ResponseWriter 包装、代理缓冲和错误处理边界。497 收藏 -
io/fs.ValidPath 接收的是文件系统内部路径,不是操作系统原生路径。本文从拒绝 .、.. 和斜杠的现象入手,拆开清理、校验与 Open 调用之间的边界。497 收藏 -
flag.FlagSet.Set 不只是在 Parse 之后补一个值:它会调用目标 flag 的 Value.Set,成功后把该参数记入 actual,重复赋值则按调用顺序覆盖。本文用子命令配置示例说明默认值、Set、Parse 与 ContinueOnError 的边界。497 收藏