Go语言技术文章
-
Go net/netip 比较 IPv4 与 IPv4-mapped IPv6 时,应先用 Unmap 统一表示,再按 Addr 或 AddrPort 选择等值判断;本文说明 Is4、Is6、Is4In6、Compare 与端口边界。391 收藏 -
用 Go atomic.Int64.Add 的新值返回语义封装并发序号生成器,并说明顺序、溢出、复制和跨进程使用边界。391 收藏 -
Go errors.As 的关键不是把错误再断言一次,而是按 error 实现方式声明目标变量。本文区分值错误和指针错误,说明包装后为何要传入 *T 或 **T,并给出排查清单。391 收藏 -
Go 服务做配置热加载时,直接改共享结构体很容易让请求读到半成品。本文用 atomic.Value 发布不可变快照,拆解更新、读取、校验和旧配置回收的边界,并给出可验证的回滚做法。390 收藏 -
slices.Concat 合并结构体切片时只复制结构体元素值,不会递归复制其中的指针、切片或 map 字段。本文用可运行示例区分元素隔离与引用字段共享,帮助判断修改结果后的影响范围。390 收藏 -
Go 的 html/template 会按输出上下文自动转义普通字符串;只有经过明确 allowlist、来源受控的片段,才应在渲染前转换为 template.HTML。本文用一个小页面说明两者的边界、代码写法和验收清单。390 收藏 -
Go 的 archive/zip 中,File.Open 返回的是带解压与校验边界的 io.ReadCloser。读取成员后应关闭它;如果外层使用 OpenReader 打开压缩包,还要另行关闭外层 ReadCloser。390 收藏 -
Go filepath.Match 的方括号表示单字符类,可用范围和 ^ 排除规则匹配文件名;本文同时说明整串匹配、转义、Windows 分隔符以及 ErrBadPattern 的处理方式。390 收藏 -
用一个可迁移的 Go 泛型 API 例子,解释约束中的 ~T 如何放宽命名类型匹配范围,以及它对调用方兼容性、返回值设计和后续演进的影响。389 收藏 -
解释 Go context 取消后 goroutine 仍可能继续工作的原因,给出 select 监听、资源释放、退出确认和可复现检查方法。389 收藏 -
Go 原生 fuzz 测试的可复现性取决于 seed corpus 管理。本文区分 F.Add、testdata/fuzz 和 GOCACHE/fuzz,说明如何保留固定边界样例、沉淀失败输入并用 go test 稳定回放。389 收藏 -
用 Go 1.22 及以上版本的 net/http ServeMux 读取路径通配符,讲清 PathValue、通配符边界、路径转义和旧版本兼容处理。388 收藏 -
Go 的 url.Parse 只验证输入能否解析成 URL 结构,不会验证 DNS、TCP、TLS 或 HTTP 服务。本文用分层检查和可超时的 net/http 示例区分解析成功与地址可达。388 收藏 -
Go 项目新增依赖后,go.mod 已经变化但 -mod=vendor 仍然找不到包,通常是 vendor 目录和 vendor/modules.txt 没有同步。本文按检查、更新、复查三条线定位原因。388 收藏 -
Go 的 html/template 会按输出上下文自动转义。本文解释为什么不能直接拼 HTML 字符串,以及如何划分普通文本、可信片段和回归检查边界。388 收藏