Go问答技术文章
-
Golang · Go问答 | 2个月前 | 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问答 | 2个月前 | 工具链 · 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 收藏 -
Golang · Go问答 | 2个月前 | 中间件 · go · 认证 · 安全 · net/http · net/http 认证中间件 Go问答 BasicAuth WWW-Authenticate
Go 的 BasicAuth 适合内部管理端、健康检查或临时保护,但 Request.BasicAuth 只负责解析,不替你决定空密码、认证失败状态码和日志内容。本文从一个标准库中间件出发,补齐 401、WWW-Authenticate、凭据校验、权限边界和测试核对。451 收藏 -
Go 扫描上传目录或日志目录时,os.ReadDir、File.Readdir 和 filepath.WalkDir 的内存与排序行为并不一样。本文用一个目录索引小实验说明如何按需读取 DirEntry、避免无意排序,并在权限错误和部分结果场景下保留可用数据。478 收藏 -
Golang · Go问答 | 2个月前 | 微服务 · Context · go并发 · Go 错误处理 context.WithCancelCause context.Cause 取消原因 ctx.Err
服务日志里只出现 context canceled 时,ctx.Err() 只能告诉你流程停了,却说不清是用户取消、上游超时还是业务主动终止。本文用 Go 1.20 引入的 context.WithCancelCause 和 context.Cause 改造一个批量查询场景,说明旧代码影响、兼容边界、错误分类与最小验证方法。465 收藏 -
Go 1.24 为基准测试增加 testing.B.Loop,能替代手写 b.N 循环,让每次基准运行只做一次昂贵的准备和清理,也减少循环体被编译器过度优化的机会。本文对比旧写法,演示迁移步骤,并说明基准数据变化时该怎么判断。243 收藏 -
Go HTTP 客户端变慢时,只看总耗时无法判断卡在 DNS、建连、TLS 还是服务端响应。本文用 httptrace.ClientTrace 采集分段时间,结合连接复用标记和最小复查清单,定位一次请求变慢的真正环节。393 收藏 -
支付渠道一多,业务代码很容易被供应商 SDK 和字段差异拖住。本文用 Go 拆出支付端口、渠道适配器和业务用例,演示如何保持核心接口稳定,并处理超时、重复回调和渠道错误映射。293 收藏 -
当一个 HTTP 请求体里连续放着多个 JSON 值时,json.Unmarshal 只能处理单个完整值。本文用 json.Decoder 循环读取连续 JSON,区分正常 EOF、语法错误和尾部脏数据,并给出请求体大小限制、空白字符和资源关闭的检查方法。458 收藏