Go语言技术文章
-
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 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 收藏 -
Go 的 nil channel 不会就绪,因此放进 select 的收发分支永远不会被选中。本文用最小示例解释它与未就绪、已关闭通道的区别,并给出初始化、动态禁用和退出处理方案。128 收藏 -
go test 在包列表模式下会复用成功的测试结果,看到 (cached) 时不一定代表测试二进制被重新运行。本文说明 go test -count=1 的适用场景、GODEBUG=gocachetest=1 的排查方法,以及测试缓存和构建缓存的区别。128 收藏 -
Go 泛型函数通常从调用实参建立类型关系,不能只凭接收变量的类型逆向猜出返回值中的类型参数。本文用最小示例解释推断边界,并给出显式实例化、增加输入参数和非泛型包装三种改法。128 收藏 -
Go xml.Decoder 的 Strict=false 不是万能容错开关。本文用缺失结束标签、未知实体、孤立结束标签、命名空间和字符集几个输入,拆开说明哪些问题会被放宽,哪些仍必须修复或显式处理。128 收藏 -
围绕 Go time.Ticker 的 Stop、ticker.C 和停止瞬间的残留 tick,说明如何结束消费循环、避免错误 drain,并给出关闭检查清单。128 收藏 -
使用 bytes.Buffer 分批处理数据时,应先用 Len 判断完整批次,再用 Next 消费固定长度;不足一批的尾部继续留在缓冲区。本文给出同步、异步和收尾写法。128 收藏 -
讲清 Go slog.HandlerOptions ReplaceAttr 的统一字段清洗方案,覆盖敏感字段脱敏、内置键重命名、分组路径判断、删除字段与回归测试。128 收藏