Go问答技术文章
-
Golang · Go问答 | 3星期前 | 随机数 · Go问答 · 安全编程 · crypto/rand · math/rand · 验证码 安全 随机数 Go crypto/rand math/rand
Go 里 crypto/rand 和 math/rand 都能生成随机值,但用途完全不同。本文用验证码、抽样和测试数据三个场景拆开安全资产、攻击路径、并发控制与验证方法,给出不容易选错的边界。163 收藏 -
flag.FlagSet.Visit 只遍历用户实际设置过的参数,VisitAll 则按字典序遍历全部已注册参数。通过一个可运行的小实验看清两者的回调范围、默认值和适用场景。163 收藏 -
Golang · Go问答 | 2个月前 | HTTP · net/http · Go问答 · 流式响应 · ResponseController · net/http FLUSH 流式响应 Go问答 ResponseController FullDuplex 写超时
用问答方式解释 Go net/http ResponseController 的定位、Flush、写入 deadline、FullDuplex 支持边界、兼容兜底和生产使用注意事项。161 收藏 -
Go 程序在本地和服务器上解析出不同时间,通常不是时钟坏了,而是输入是否带时区、time.Parse 使用的 Location 以及序列化格式没有对齐。本文用最小实验拆开这三个边界,并给出可回归的处理方式。161 收藏 -
Golang · Go问答 | 3星期前 | HTTP · 流式处理 · Go问答 · encoding/json · 请求体 · Go DECODE eof 流式解析 json.Decoder JSON请求体
Go 用 json.Decoder 读取 HTTP 请求体时,第二次 Decode 得到 EOF 不一定是异常:它可能代表输入已正常读完,也可能是把单个 JSON 请求误当成了连续流。本文从单对象、尾随空白和多值 JSON 三种边界出发,给出最小判断、严格校验与可复查的读取流程。160 收藏 -
Go 的 json.Unmarshal 默认会忽略结构体中不存在的字段。本文用 Decoder.DisallowUnknownFields 给 HTTP JSON 接口加上字段契约,并说明兼容升级、错误定位和生产边界。160 收藏 -
bytes.Buffer.Bytes 返回的是底层缓冲区的未读切片。Reset 会清空长度但保留存储,后续 Write 可能改写旧切片可见的数据;本文用最小实验说明安全复制和复用边界。160 收藏 -
Go 测试里的临时目录、数据库连接和后台 goroutine 不该靠测试末尾的一行手工清理。用 testing.TB.Cleanup 注册逆序清理函数,再结合 t.Run 与 t.Parallel 的父子边界,可以让失败测试和并行子测试都回收自己的资源。159 收藏 -
Go 的 encoding/json 使用 omitzero 处理零值字段。本文用 time.Time、空切片和自定义 IsZero 场景,对比 omitempty 的判断并给出接口调整后的验收方法。158 收藏 -
Go 1.21 带来的 log/slog 不只是把日志改成 JSON。本文从一次请求日志难以检索的场景出发,解释结构化字段、Handler、级别过滤和高频日志的取舍,并给出一套可渐进迁移的检查方法。158 收藏 -
本文用 Go 接口返回 JSON 的现象入手,逐步验证 nil slice 和空 slice 在 len、cap、底层数组、json.Marshal 输出上的区别,并给出 API 响应保持 [] 的初始化方案。157 收藏 -
Go 1.19 引入的 fmt.Appendf 可以把格式化结果直接追加到已有字节切片,适合协议拼接、日志缓冲和小型序列化场景。本文说明返回值、容量扩展、兼容写法和基准测试边界。156 收藏 -
Go 的 net/http.Header.Get 只返回一个值。本文用可复现的响应头示例说明 Header.Get、Header.Values 与 Header.Add 的关系,帮你判断何时该读取单值、何时必须遍历全部值。155 收藏 -
Go 泛型约束写了具体类型,却不代表类型参数拥有该类型的全部方法。本文从类型集、方法集和接口约束的边界出发,解释常见编译错误,给出可运行的修复写法,并说明什么时候该把行为写进约束。154 收藏 -
用 Go 的 slog.LogValuer 控制日志字段的延迟求值与脱敏,厘清日志级别过滤、LogValue、slog.String 和 slog.Group 的调用边界。154 收藏