Go语言技术文章
-
当 errors.Is 判断包装错误失效时,先区分单链 Unwrap 与 errors.Join 的多链展开,再用可复现代码检查哨兵错误是否仍在错误树中。本文从一个接口报错现场出发,给出定位、修复和边界验证方法。275 收藏 -
解释 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 time.Parse 与 time.ParseInLocation,说明带 Z、数值偏移和时区缩写的字符串如何选择布局,给出可复用的解析代码与排错清单。275 收藏 -
Go 的 text/template 与 html/template API 很像,但输出边界不同:日志和邮件纯文本使用 text/template,浏览器 HTML 使用 html/template。本文用一个最小渲染项目对比普通文本、HTML 文本节点和 href 属性中的转义结果,并说明 template.HTML 的信任边界。275 收藏 -
Go 的 encoding/json 默认会忽略结构体未声明的 JSON 键。要让接口在字段拼错或协议漂移时立即报错,可以使用 json.Decoder 并调用 DisallowUnknownFields,同时再解码一次确认请求体没有第二个 JSON 值。275 收藏 -
Go 的 //go:fix inline 不会盲目把带副作用的实参替换进函数体。源码级内联器会分析求值顺序和次数,必要时保留显式参数绑定。本文用原创示例说明风险、工具策略与迁移验收方法。275 收藏 -
Go 一次性值加载适合只初始化一次且可并发调用的值计算,但初始化函数一旦 panic,后续调用仍会重复 panic;需要重试时,应把错误返回和重试状态放在明确的控制器中。274 收藏 -
Go 的 archive/zip 中,目录条目和空文件都可能没有可读内容,但判断依据不同。本文用 FileHeader.IsDir、Name、NonUTF8 和 Open 组织一个安全的解压循环,说明如何保留空文件并定位条目读取错误。274 收藏 -
strings.Builder 能减少循环拼接中的中间字符串复制,但 Grow、String、Reset 和按值传递都有明确边界。本文用最小示例说明如何预估容量、保持单一所有者,并用 Cap、Len 和基准测试判断优化是否成立。274 收藏 -
Go 的 url.JoinPath 能在拼接 URL 路径时清理点号段和重复斜杠。本文通过后端接口地址实验讲清函数与方法差异、尾斜杠规则、路径转义和安全边界。274 收藏 -
Go 接口签名不只是把参数算个 HMAC,还要把 timestamp、nonce、密钥保管、权限收窄和审计日志连起来。文章用一个可落地的中间件示例讲清防重放校验链路和常见坑。273 收藏 -
Go HTTP 客户端第一次请求失败后直接重用同一个 Request,第二次可能只剩空请求体。问题不在重试次数,而在 Body 已经被消费;用 Request.GetBody 构造可重放副本,配合 Request.Clone 处理上下文和 Header,才能把重试边界写清。273 收藏