Go问答
已收录文章:102篇
-
Go 里 crypto/rand 和 math/rand 都能生成随机值,但用途完全不同。本文用验证码、抽样和测试数据三个场景拆开安全资产、攻击路径、并发控制与验证方法,给出不容易选错的边界。163 收藏
-
Go 服务把 regexp.Compile 放进请求函数后,正则本身没变,延迟却会随并发上升。本文用基准对比请求内编译、包级预编译和受控缓存,解释编译成本、并发读写与动态规则的边界。479 收藏
-
Golang · Go问答 | 2个月前 | net/http · Go问答 · 接口安全 · 版本迁移 · ServeMux · net/http 通配符 路由冲突 ServeMux Go 1.22 PathValueGo 1.22 改造了 net/http.ServeMux 的模式语法和优先级,旧项目迁移时最容易踩到方法覆盖、通配符冲突和大括号语义变化。本文用最小代码验证匹配规则、冲突触发条件和上线前的兼容检查。490 收藏
-
Go 的 url.Values 既能表达同名重复参数,也能表达单值参数,但 Add、Set 和 Encode 的组合会直接影响服务端拿到的结果。本文用标签筛选接口说明参数如何构造、编码、解析和验收。386 收藏
-
Golang · Go问答 | 2个月前 | 超时 · Context · 并发控制 · Go问答 · Go 后台任务 Deadline 请求取消 context.Cause context.WithoutCancelcontext.WithoutCancel 可以让派生上下文忽略上游取消,但它会同时失去 Deadline、Err 和 Done。本文用 HTTP 请求收尾场景对比 WithoutCancel、WithTimeout 和 WithCancelCause,给出可验证的后台任务边界和回归指标。465 收藏
-
Go 里用 slices.Delete 删除元素后,切片长度变小不代表底层数组立刻释放。要结合 Go 版本、元素类型、尾部引用是否清零和切片是否继续持有容量来判断 GC 边界。本文从批量过滤场景拆开删除、复用与内存回收的关系。112 收藏
-
Go 的 POST 请求第一次失败后重试,服务端却读到空 Body,通常不是服务端丢数据,而是请求体只被消费了一次。本文用 bytes.Reader、GetBody 和两次请求日志拆开这个问题,给出可验证的重试写法与边界。488 收藏
-
Go HTTP 客户端第一次请求失败后直接重用同一个 Request,第二次可能只剩空请求体。问题不在重试次数,而在 Body 已经被消费;用 Request.GetBody 构造可重放副本,配合 Request.Clone 处理上下文和 Header,才能把重试边界写清。273 收藏
-
接口能返回 200,不代表客户端真的能用。本文用 Go 标准库 httptest.NewServer 从零写一个小型接口烟雾测试器,逐步检查状态码、Content-Type、JSON 字段和超时,并给出适合 CI 的验收边界。385 收藏
-
Go 用 bufio.Reader 解析带长度或分隔符的协议时,Peek 只是查看缓冲内容,不会推进读取位置;Discard 才会消费字节。本文用一个简化帧协议拆开 Peek、Read、Discard、UnreadByte 的数据流转和边界处理。414 收藏
-
Go 用 bufio.Reader 解析带长度或分隔符的协议时,Peek 只是查看缓冲内容,不会推进读取位置;Discard 才会消费字节。本文用一个简化帧协议拆开 Peek、Read、Discard、UnreadByte 的数据流转和边界处理。234 收藏
-
Go 1.21 引入的内置 clear 可以直接清空 map 或切片,但它不会让并发访问变安全,也不会替你决定是否复用底层存储。本文从请求缓存复用场景对比 delete 循环、重新 make 和 clear 的语义、容量与并发边界。137 收藏