Go问答技术文章
-
解释 Go tls.Config.Clone 的浅复制语义、并发使用边界、会话票据共享风险与证书轮换写法。275 收藏 -
用 Go flag.FlagSet 处理子命令参数时,未知参数、缺少参数值和 -h 不能混在一起判断。本文用 ContinueOnError、Usage 和 Parse 的返回结果拆开这三类分支。275 收藏 -
go vet 的 printf 分析器不是按函数名猜测所有自定义格式函数,而是依赖包装函数推断或显式声明。本文解释自动识别失效的常见边界,并给出 if false 绑定与 -printf.funcs 两种稳妥处理方式。275 收藏 -
Go 的 http.Header 用小写字符串调用 Get 也可能成功,因为 Get 会把查询键规范化;但直接用小写键构造 map 时,直接索引与 Get 查找的键并不相同。本文用对比示例拆清这条兼容边界。275 收藏 -
Go HTTP 客户端第一次请求失败后直接重用同一个 Request,第二次可能只剩空请求体。问题不在重试次数,而在 Body 已经被消费;用 Request.GetBody 构造可重放副本,配合 Request.Clone 处理上下文和 Header,才能把重试边界写清。273 收藏 -
Go 的类型别名与定义类型写法相似,但赋值兼容性不同。本文从 cannot use 编译错误出发,说明 alias、defined type 和显式转换的边界,并给出可复现的检查方法。273 收藏 -
Go 的 encoding/json 默认会忽略结构体没有定义的 JSON 字段。本文说明如何用 Decoder.DisallowUnknownFields 严格拒绝多余字段,并把它安全接入 HTTP 接口。273 收藏 -
Go 的 testing.T.Setenv 会修改整个测试进程的环境,并用 Cleanup 恢复原值,因此不能用于并行测试或有并行祖先的测试。本文解释冲突原因,并给出串行设置、依赖注入和子进程隔离的选择方法。273 收藏 -
Go 结构体一旦包含 sync.Mutex,就不能把它当普通值随意复制。本文用共享 map 的例子说明值接收者和 b := a 为什么会让两份锁保护同一份数据,并给出指针接收者、显式 Clone 与 go vet 检查方法。273 收藏 -
Go 的 cgo 文件能否被识别,取决于 CGO_ENABLED、import C、同包目录、GOOS/GOARCH 和 go:build 约束。本文用 go list -json 查看 CgoFiles、CFiles 与 IgnoredGoFiles,定位文件未参与构建的具体层级。273 收藏 -
本文用 filepath.IsLocal、filepath.Clean、filepath.Join 和 filepath.Rel 处理 Go 用户路径,说明词法规范化、固定根目录拼接与符号链接安全检查的边界。273 收藏 -
解释 Go io.Copy 看似复制不完整时如何区分 EOF、短写入和自定义 Reader 错误,并给出可复现的检查代码。272 收藏 -
Go crypto/x509 中,Certificate.VerifyHostname 可以单独判断证书是否匹配指定主机名。本文说明它检查的字段、HostnameError 的排查方法,以及何时需要改用完整的 Certificate.Verify。272 收藏 -
Go 服务把 regexp.Compile 放进请求路径后,p99 往往先于 CPU 告警变差。本文用一组可复现的基线对比,说明预编译、有限缓存和输入边界各自解决什么问题,并给出可验收的 benchmark 方法。271 收藏 -
net.Buffers 把多个字节切片组织成一次 WriterTo 写入,并在支持批量写的连接上走 writev 优化;理解 WriteTo 的切片消费和短写边界,才能安全拼接协议响应。271 收藏