Go问答技术文章
-
Go 1.25 将 testing/synctest 正式带入标准库,测试超时、定时器和并发协作时不必再真实等待。本文用一个带 deadline 的通知流程说明 synctest.Test、synctest.Wait、时间推进和版本兼容边界。107 收藏 -
Go 1.24 引入 runtime.AddCleanup 后,资源清理不必再把所有希望寄托在 SetFinalizer 上。本文从一个文件句柄包装器切入,解释 Cleanup.Stop、runtime.KeepAlive、回收时机和显式 Close 的边界,并给出可回归的迁移检查。454 收藏 -
Golang · Go问答 | 4天前 | HTTP · IO · 流式处理 · Go问答 · 性能边界 · TeeReader · io.TeeReader io.Reader 请求体 日志审计 Go问答 流式复制
Go 的 io.TeeReader 会把每次读取到的字节同步写入另一个 Writer,适合做摘要、哈希和审计,但不等于后台复制。本文用请求体落盘场景拆开同步写入、写入错误传播、部分读取和失败清理边界,给出可验证的安全用法。289 收藏 -
Go 程序从一组参数扩展成 build、serve、migrate 等子命令后,直接共用 flag.CommandLine 很快会遇到参数串台、Usage 输出混乱和错误码不一致。本文用 flag.NewFlagSet 搭一个小型命令行入口,拆开 Parse、帮助输出和失败退出的边界。205 收藏 -
Go 1.23 的 slices.Collect 能把迭代器收集成切片,但它不是零成本转换。本文从惰性生成、空序列、容量增长和大结果集几个边界入手,配合可运行代码说明什么时候适合收集,以及如何避免一次性占满内存。470 收藏 -
Golang · Go问答 | 4天前 | 随机数 · Go问答 · 安全编程 · crypto/rand · math/rand · 验证码 安全 随机数 Go crypto/rand math/rand
Go 里 crypto/rand 和 math/rand 都能生成随机值,但用途完全不同。本文用验证码、抽样和测试数据三个场景拆开安全资产、攻击路径、并发控制与验证方法,给出不容易选错的边界。163 收藏 -
Go 服务把 regexp.Compile 放进请求函数后,正则本身没变,延迟却会随并发上升。本文用基准对比请求内编译、包级预编译和受控缓存,解释编译成本、并发读写与动态规则的边界。479 收藏 -
Golang · Go问答 | 4天前 | net/http · Go问答 · 接口安全 · 版本迁移 · ServeMux · net/http 通配符 路由冲突 ServeMux Go 1.22 PathValue
Go 1.22 改造了 net/http.ServeMux 的模式语法和优先级,旧项目迁移时最容易踩到方法覆盖、通配符冲突和大括号语义变化。本文用最小代码验证匹配规则、冲突触发条件和上线前的兼容检查。490 收藏 -
Go 的 url.Values 既能表达同名重复参数,也能表达单值参数,但 Add、Set 和 Encode 的组合会直接影响服务端拿到的结果。本文用标签筛选接口说明参数如何构造、编码、解析和验收。386 收藏 -
Golang · Go问答 | 4天前 | 工具链 · go语言 · Go教程 · 版本升级 · 代码重构 · Go 1.26 go fix modernizer 代码升级 new 表达式 Go 代码迁移
Go 1.26 重写了 go fix,把它从旧式修复命令变成基于 go/analysis 的 modernizer 工具。本文用一个含有可选字段和自定义 newInt 函数的 Go 模块,演示如何预览建议、限定改动范围、检查 go.mod 版本并完成回归。147 收藏 -
Go 1.26 放宽了内置 new 的参数限制,new(表达式) 可以直接创建带初始值的指针。本文用 JSON 可选字段和泛型示例说明它解决了什么问题、旧代码是否需要迁移,以及升级后如何验证兼容性。318 收藏 -
Golang · Go问答 | 2星期前 | go · 性能 · kubernetes · 运行时 · 容器化 · Kubernetes GOMAXPROCS Go问答 Go 1.25 SetDefaultGOMAXPROCS 容器CPU配额
同一份 Go 服务部署到 Kubernetes 后,节点有 16 个核,Pod 却只限 2 个核,手动设置的 GOMAXPROCS 还可能在扩缩容后失真。Go 1.25 已让运行时默认读取容器 CPU 配额,本文用一个可复现的小程序说明如何检查旧配置、恢复运行时默认值,并给出上线前的边界清单。467 收藏 -
Golang · Go问答 | 2星期前 | 超时 · Context · 并发控制 · Go问答 · 请求生命周期 · Go 后台任务 Deadline 请求取消 context.Cause context.WithoutCancel
context.WithoutCancel 可以让派生上下文忽略上游取消,但它会同时失去 Deadline、Err 和 Done。本文用 HTTP 请求收尾场景对比 WithoutCancel、WithTimeout 和 WithCancelCause,给出可验证的后台任务边界和回归指标。465 收藏 -
用 Go encoding/csv 完成一套可复查的 CSV 入库流程:去掉 UTF-8 BOM,跳过空行,校验列数,规范化字段,并用唯一键和事务处理重复记录。408 收藏 -
Go 在 range 遍历 map 时允许删除尚未访问的键,但遍历顺序本来就不稳定,新增元素也不能依赖是否会被访问。本文用小实验区分语言保证、实现现象和可测试的安全写法。384 收藏