Go问答技术文章
-
sync.Pool归还对象不等于立即释放内存,也不会自动关闭外部资源。文章解释容量保留、外部引用和所有权错误,给出按容量筛选缓冲区的示例及对象池适用判断。247 收藏 -
Go 的 net/mail.AddressParser.ParseList 可以把逗号分隔的邮箱地址解析为 []*mail.Address。本文说明普通地址、显示名、带引号逗号和解析错误的处理边界,并比较它与 Header.AddressList 的使用场景。241 收藏 -
context.Cause 返回的 error 不能只靠字符串判断。本文从取消信号的生命周期出发,说明如何用 ctx.Err() 判断标准状态,用 errors.Is 和 errors.As 判断自定义原因,并区分主动取消、超时和父级传播。238 收藏 -
SystemCertPool错误应先区分系统根加载、补充PEM读取解析与TLS验证阶段。文章给出保留错误链的封装,说明权限和路径分类的边界,以及平台、环境变量和缓存差异。234 收藏 -
go/types.Alias 的 TypeParams 用来读取泛型别名声明参数,TypeArgs 用来读取具体实例实参。本文通过类型检查结果说明两者的区别、Origin 的归并用途、nil 边界以及 Alias 与 Named 的选择规则。233 收藏 -
Go 字符串出现非法 UTF-8 后,如何用 ToValidUTF8 按连续片段替换、保留合法 U+FFFD,并约束替换字符串和原始数据保留策略。226 收藏 -
Go sql.Tx 提交成功后再 Rollback 返回 ErrTxDone,表示事务对象已经结束,并不否定提交结果。通过事务收尾函数说明 defer 回滚、错误链保留、Commit 失败边界与收尾所有权。224 收藏 -
Go TLS 服务端没有按 SNI 返回证书时,先检查 ClientHelloInfo.ServerName 是否存在、证书索引是否按规范化域名匹配,以及 GetCertificate 的回退优先级。本文给出带默认站点和错误诊断的最小配置。212 收藏 -
Go 1.22 起 archive/zip.Writer.AddFS 可以从 fs.FS 遍历目录并按原结构写入 ZIP。本文给出完整写法,说明 AddFS 与 Close 的错误处理,以及需要过滤文件或修改元数据时的取舍。208 收藏 -
Go 的 unicode.IsDigit 判断的是 Unicode 十进制数字字符。本文用 rune 遍历示例说明它与 ASCII 字节判断、strconv 数值解析和 unicode.IsNumber 的区别,帮助你处理多语言文本中的数字字符。208 收藏 -
用 Go list -json 查看包的 GoFiles、EmbedPatterns 和 EmbedFiles,区分参与构建的 Go 源文件、嵌入声明与最终匹配到的资源文件,并给出模板化提取方式。207 收藏 -
通过 Go html/template 小程序区分正常转义、预编码导致的重复转义和 URL 上下文过滤,说明输出源码与页面显示差异,以及 template.HTML 的可信内容边界。207 收藏 -
os.Lstat 没有一个让它按配置决定是否跟随符号链接的开关:它固定描述链接条目,os.Stat 才描述目标。本文用 ModeSymlink、Readlink、相对路径基准和错误分支排查“配置没生效”的常见误解。206 收藏 -
Go httputil.DumpRequestOut 在 body=true 时需要读取请求体生成调试表示,再恢复 req.Body 供后续发送继续读取。本文解释这段生命周期、body 参数选择、内存与敏感数据边界,以及错误处理方式。206 收藏 -
xml.Encoder 的 Indent 会按元素嵌套深度插入换行和缩进。本文说明 prefix、indent 的区别,以及 EncodeToken 场景下 Flush、Close 的收尾边界,帮助你稳定生成可读的流式 XML。205 收藏