Go语言技术文章
-
bytes.Buffer.Bytes 返回的是未读内容的别名切片,不是自动拷贝。本文用 Write、Grow、Reset 和 append 的边界说明何时可以直接读,何时必须 copy,避免缓存复用后数据悄悄变化。267 收藏 -
Go 1.27 将 uuid 纳入标准库后,生成、解析和数据库持久化该怎么分层?本文用一个订单请求标识场景,拆开 uuid API 的职责、字符串边界、二进制存储取舍与迁移检查点。267 收藏 -
Golang · Go问答 | 1个月前 | 单元测试 · 错误处理 · go · Go testing.T Cleanup失败 Go t.Cleanup错误处理 Go测试清理函数继续执行 Go测试失败不终止 Go测试资源释放排查
t.Cleanup 是测试结束阶段的清理回调,失败只会影响测试结果或当前清理函数,不会回到注册点打断已经继续执行的测试体。本文按执行时机、失败标记和清理顺序拆解排查方法。267 收藏 -
使用Go标准库mime/multipart解析上传请求时,先从Content-Type取得boundary,再用multipart.Reader按部件读取Header、字段名和文件名,并正确区分io.EOF与解析错误。267 收藏 -
Go map遍历顺序不应作为输出契约。本文用键切片排序和Go 1.23+的maps.Keys与slices.Sorted,演示如何在不修改原始map的前提下稳定输出配置项,并说明字符串键、数值键、空Map与并发边界。267 收藏 -
Go regexp 遇到 .+ 贪婪匹配时,字段可能跨过分隔符吞掉后续内容。本文用可复现输入对比贪婪、非贪婪和字符类边界,并给出子匹配回归清单。267 收藏 -
Go 的 fmt 在格式化实现 Stringer 的值时会调用 String;如果 String 再把原接收者交给 fmt,就可能反复分派。本文给出复现、修复与方法集边界。267 收藏 -
Go 的 rows.Scan 成功只说明当前行完成了类型转换,rows.Err 才能确认整个结果集迭代没有在 Next、网络或 context 取消处失败。本文给出可直接复用的处理模板和边界清单。267 收藏 -
结合 Go 1.27 对具体泛型方法的支持,解释为什么接口方法仍不能声明额外类型参数,并用顶层泛型函数、接收者提升参数、具体泛型方法和窄接口四种方案重构 API。267 收藏 -
介绍 Go 1.24 及以上如何使用 crypto/x509 的 CertificatePolicies 限制证书链策略 OID,并说明策略图、anyPolicy、版本边界和排查方法。267 收藏 -
Go atomic.Int64保证单字段操作原子,但多个Load不构成同一时刻快照。本文用完整小程序说明并发加减、运行期采样、最终计数与周期取差,并归纳重置和对象复制的边界。267 收藏 -
Go net/url 解析带端口的域名和 IPv6 URL 时,Host、Hostname()、Port() 容易混用。本文用最小示例说明如何读取主机与端口,并处理方括号、Zone、缺失端口和非法端口边界。267 收藏 -
用 Go 标准库 debug/elf 打开 ELF 文件,遍历 File.Sections 读取节区名称、类型、偏移和大小,并说明 Section、Data、Open 之间的选择与特殊节区边界。267 收藏 -
客户端断开后 Handler 未退出,应区分请求取消尚未被观察到与业务未响应取消。本文通过最小本地 HTTP 服务说明 Context 传递、业务退出、代理边界和超时预算,不把客户端报错等同于后端停止。267 收藏 -
Go strings.Split 返回空元素通常不是异常,而是前置、连续或尾部分隔符保留了空字段位置。本文结合代码说明 Split、空分隔符与 Fields 的边界,并给出保留或过滤空字段的判断清单。267 收藏