Go语言技术文章
-
用 Go 的 bufio.Scanner 自定义 SplitFunc,按换行切出带 [source] 前缀的日志记录,正确处理 atEOF、格式错误和超长 token。129 收藏 -
解释 Go 循环中 defer 为什么会让资源和内存峰值随迭代数增长,并用小函数边界改写为每轮及时清理。129 收藏 -
使用 Go net/url.Values 管理查询参数,借助 Encode 完成键排序和 URL 编码,再安全写回 url.URL。文章覆盖多值参数、空值、已有 RawQuery 和解析错误等边界。129 收藏 -
解释 Go gzip.Header.Name 解压后为空的四类原因:源流未写 FNAME、Name 设置过晚、Writer.Reset 清空头部,以及多成员默认只记录首个 Header,并给出正确代码与检查清单。129 收藏 -
crypto.Hash 只是哈希算法标识,Available 检查对应实现是否已链接并注册到当前 Go 二进制。本文用 SHA-256 示例解释 false 的原因、导入方式、New 的 panic 边界和推荐写法。129 收藏 -
Go 1.24 的 http.Protocols 可以显式控制 HTTP/1、TLS HTTP/2 和明文 HTTP/2。本文用一份策略构造函数分别配置 Server.Protocols 与 Transport.Protocols,并说明 nil、零值、URL 与 TLS 条件的边界。129 收藏 -
Go 1.20 起,普通接口类型可以作为 comparable 约束的类型实参,但接口动态值仍可能因为切片、map 或函数而在比较时 panic。本文区分接口可比较、严格可比较和约束满足规则,并给出泛型函数与 map 键的判断清单。129 收藏 -
解释 Go testing.T.Run 的布尔返回值、子测试失败日志与父测试汇总关系,给出保留案例名称和失败上下文的写法,并说明 t.Parallel 场景为什么不能简单依赖立即返回值。129 收藏 -
Go HTTP 服务调用 Server.Shutdown 后仍不退出,多半是活动长请求或 hijack 连接没有收到应用级关闭信号。本文按连接状态给出排查、通知与等待方案。129 收藏 -
Go http.Request FormValue 会隐式解析表单并忽略错误,导致空字符串掩盖正文损坏或字段缺失。本文给出 ParseForm、ParseMultipartForm、PostForm 与错误校验的清晰边界。129 收藏 -
Go encoding/json/v2 的 Options 不是一份只能全局修改的开关表,而是可以随调用组合的配置值。本文用编码、解码和 v1 兼容三个场景说明选项作用面、覆盖顺序与迁移边界。129 收藏 -
go-geom 的 SRID 是几何对象上的参考系标识,不是投影计算器。本文用 SetSRID、TransformInPlace 和 EWKB 例子说明为什么修改 SRID 不会改坐标,以及真正变换坐标时应如何划分责任。129 收藏 -
Go 1.24 引入的 os.Root 可以把文件操作固定在指定目录树内。本文用一个 HTTP 文件服务示例说明 filepath.Localize、Root.Open、目录判断、错误响应和平台限制。128 收藏 -
用 bytes.Buffer 解析批量协议时,Reset 可以复用已分配容量,但不会替你维护消息边界。本文用固定长度前缀示例说明读取推进、半包判断、Bytes 切片生命周期和复用检查清单。128 收藏 -
Go 的 Rows.ColumnTypes 不直接返回 nil 长度,ColumnType.Length 返回 int64 与 ok。本文区分固定长度、无界类型、驱动不支持和业务包装层 nil,并说明如何把长度元数据与 SQL NULL 分开处理。128 收藏