Go问答技术文章
-
用 Go flag.FlagSet 处理子命令参数时,未知参数、缺少参数值和 -h 不能混在一起判断。本文用 ContinueOnError、Usage 和 Parse 的返回结果拆开这三类分支。275 收藏 -
Golang · Go问答 | 1个月前 | net/http · Go问答 · HTTP重试 · 请求体 · 接口稳定性 · net/http Go HTTP重试 Request.GetBody Request.Clone 请求体复用
Go HTTP 客户端第一次请求失败后直接重用同一个 Request,第二次可能只剩空请求体。问题不在重试次数,而在 Body 已经被消费;用 Request.GetBody 构造可重放副本,配合 Request.Clone 处理上下文和 Header,才能把重试边界写清。273 收藏 -
Go 的类型别名与定义类型写法相似,但赋值兼容性不同。本文从 cannot use 编译错误出发,说明 alias、defined type 和显式转换的边界,并给出可复现的检查方法。273 收藏 -
解释 Go io.Copy 看似复制不完整时如何区分 EOF、短写入和自定义 Reader 错误,并给出可复现的检查代码。272 收藏 -
Go 服务把 regexp.Compile 放进请求路径后,p99 往往先于 CPU 告警变差。本文用一组可复现的基线对比,说明预编译、有限缓存和输入边界各自解决什么问题,并给出可验收的 benchmark 方法。271 收藏 -
net.Buffers 把多个字节切片组织成一次 WriterTo 写入,并在支持批量写的连接上走 writev 优化;理解 WriteTo 的切片消费和短写边界,才能安全拼接协议响应。271 收藏 -
Golang · Go问答 | 3天前 | 性能 · 安全 · 密码学 · Go问答 · API边界 · Go crypto/subtle 侧信道 WithDataIndependentTiming 常量时间
Go 1.24 引入的 crypto/subtle.WithDataIndependentTiming 能在支持的平台上为一段常量时间代码启用架构级时序保护,但它不会把普通的变长代码自动变成常量时间。本文结合 ConstantTimeCompare、闭包边界、panic 清理和非 Arm64 行为,说明什么时候该用、怎么验收。271 收藏 -
Golang · Go问答 | 4天前 | 命令行 · flag · 错误处理 · 工程实践 · Go问答 · Go Parse 命令行参数 参数解析 flag.FlagSet ContinueOnError
flag.FlagSet 的 Parse 失败并不等于整个对象回到初始状态。本文用 ContinueOnError 拆开 parsed、已写入的默认值、剩余参数和二次 Parse 的边界,说明什么时候应该新建 FlagSet,什么时候可以在测试或子命令场景复用。270 收藏 -
Golang · Go问答 | 2个月前 | 中间件 · Context · Go问答 · 架构模式 · 代码边界 · 中间件 context Context.Value Go问答 WithValue 请求作用域 业务参数
Go context 可以放用户 ID、traceID 这类请求作用域值,但不适合替代函数参数。本文用中间件、Service 和 Repository 的边界示例说明怎么判断。269 收藏 -
同一个模块在两台机器上的依赖下载或交叉编译结果不一致时,go env -changed 能快速列出有效值偏离默认值的环境设置。本文把 GOENV、go env -w 与 shell 环境拆开,给出可复现的检查顺序。269 收藏 -
用 Go crypto/rand.Int 生成安全随机下标时,上界必须是正数且结果不包含上界;文章用最小代码说明无偏分布、big.Int 转换和 Reader 错误处理边界。269 收藏 -
Golang · Go问答 | 1个月前 | 并发 · channel · Mutex · 性能优化 · Go问答 · benchmark · Goroutine channel Mutex 并发性能 锁等待 benchmark Go问答
Go 里 Mutex 和 channel 不是谁绝对更快。保护一个共享变量时,Mutex 往往更直接;交接任务、串联 worker、表达所有权转移时,channel 更自然。判断时别只盯 ns/op,要看临界区、队列等待和业务动作。268 收藏 -
Golang · Go问答 | 1个月前 | go · 安全 · net/http · HTTP重定向 · 请求头 · 请求头 Authorization 安全边界 CheckRedirect Go HTTP重定向
Go 的 http.Client 遇到 301、302 或 307 时,不会无条件把原请求头复制到新地址。本文从一次鉴权失效现场出发,验证 CheckRedirect、Authorization、Cookie 和跨主机跳转的行为,并给出安全可控的处理方式。268 收藏 -
Golang · Go问答 | 4天前 | JSON · go · 数据校验 · 错误排查 · 接口参数 · JSON Go encoding/json 嵌套对象 DisallowUnknownFields Decoder 字段校验
DisallowUnknownFields 只会在目标是结构体时拒绝未知键,嵌套结构体仍会继续校验,但 map、interface 和自定义 UnmarshalJSON 会改变边界。通过一个可运行的配置解码例子,可以看清错误出现的位置以及如何补上严格校验。268 收藏 -
Go 使用 io.CopyN 复制固定长度数据时,源数据不足会返回已复制字节数和 EOF。本文用可复现的小例子拆开短读、剩余字节与错误判断,并说明什么时候应该改用 io.ReadFull。267 收藏