Go语言技术文章
-
Go 模糊测试里的种子会执行,但不一定产生新的覆盖边或被计为 new interesting。本文从种子语料、输入规范化、守卫条件和覆盖反馈入手,说明如何设计真正命中目标分支的最小种子。183 收藏 -
解释 Go Fuzz 失败输入为什么通常应保留到 testdata/fuzz,并区分真实实现缺陷、错误断言、非确定性、敏感数据和重复语料的不同处理方式。183 收藏 -
http.Request.Clone 会深复制 URL、Header 等可复制字段,但 Body 仍是共享的 io.ReadCloser。本文按出站可重放、入站有界和大流式请求给出安全选择。182 收藏 -
用一个窄而清晰的 Go 类型约束统一 int、int64 和 float64 求和,并通过近似类型项支持业务命名类型。文章给出 Sum、SumBy、表驱动测试,以及空切片、溢出和浮点精度的边界说明。182 收藏 -
ResponseController.Hijack 在 HTTP/2 下返回 ErrNotSupported,根因是 HTTP/2 ResponseWriter 不提供 Hijacker 能力。本文说明 Unwrap 查找链、协议差异、错误判断与降级方案。182 收藏 -
testing/synctest 判断 channel 是否阻塞,关键不在于看到某个 goroutine 停住,而在于它是否只能被同一 bubble 内的事件唤醒。本文从 channel 来源、synctest.Wait 到 nil channel 和外部 I/O,整理一套可操作的判断方法。182 收藏 -
Go 1.22 提供的 reflect.TypeFor[T] 可以直接取得类型参数 T 的反射类型。本文对比 reflect.TypeOf 的零值写法、指针 Elem 写法与 TypeFor 的迁移边界,说明哪些代码更清晰,哪些场景仍然必须保留动态反射。182 收藏 -
t.TempDir 的清理时机绑定调用它的 testing.T:父测试创建的目录会保留到所有子测试完成,子测试创建的目录只保留到该子测试树结束。本文结合并行子测试说明安全共享、隔离和清理顺序。181 收藏 -
slog.LogAttrs 直接接收类型化 Attr,可跳过 Log 的交替键值解析和通用参数转换;再配合 Logger.With、Enabled 与基准测试,可以减少热点日志中的重复工作和不必要分配。180 收藏 -
Go 客户端提示证书主机名不匹配时,证书可能仍在有效期内且签发链可信。本文拆解实际校验名、DNS/IP SAN、Common Name、通配符、SNI 与代理选证书,并给出安全诊断程序和固定 IP 拨号的正确配置。180 收藏 -
omitzero 只按 Go 零值或 IsZero 返回值省略字段。本文从标签逗号、nil 与空容器、自定义零值和 Marshal 方向定位未生效原因。180 收藏 -
slices.Collect 会把惰性 iter.Seq 完整物化为新切片,并从 nil 切片逐项 append。本文给出槽位、引用载荷与扩容峰值的估算方法,以及已知数量时用 AppendSeq 预分配、数量未知时限量或流式处理的写法。180 收藏 -
Golang · Go教程 | 1天前 | Context · 超时控制 · 并发编程 · 资源管理 · go语言 · Go并发 资源释放 WithTimeout context.AfterFunc 超时任务
context.AfterFunc 可以在超时取消后主动关闭任务占用的连接或句柄,从而解除阻塞。本文给出统一释放入口、完成信号与错误回传写法,并说明正常结束、超时竞争和远程收尾的边界。179 收藏 -
Go bufio.Scanner 的 Buffer 参数同时涉及初始缓冲区和 token 最大上限。本文用长行读取示例说明如何按数据分布设置 max,如何处理 token too long,以及什么时候应该改用 bufio.Reader。178 收藏 -
Go 标准库 uuid.UUID 本质是 16 字节数组。本文讲清 36 字节规范文本、32 字符兼容文本和 16 字节原始二进制的区别,并给出安全双向转换、格式选择与避坑代码。178 收藏