Go问答技术文章
-
Go 错误判断不要只比较 Error() 字符串。本文用最小示例拆开 fmt.Errorf 的 %w、errors.Join 的多分支包装和自定义 Is 方法,说明 errors.Is 什么时候能匹配、为什么 errors.Unwrap 对 Join 不够用,以及如何写出可回归的错误契约。407 收藏 -
Go 切片赋值只复制描述符,不会复制底层数组。本文对比直接赋值、copy 和 slices.Clone,演示子切片修改如何影响原数据,并说明 nil、容量和 API 返回值的选择。405 收藏 -
用一个小型 Go 日志筛选器说明如何同时支持文件参数和标准输入,处理参数优先级、逐行读取、字段校验、错误退出码以及管道联调。403 收藏 -
Golang · Go问答 | 3星期前 | golang · HTTP · Context · 并发编程 · context.Context context.WithTimeout Go HTTP 超时
Go 服务调用 HTTP、数据库或 RPC 时,超时不能只靠客户端等待。本文用 context.WithTimeout 给请求链路加上可传播的截止时间,并说明 cancel、父子 Context、select 和错误判断的常见坑。397 收藏 -
sync.Cond 的 Wait、Signal 和 Broadcast 不是消息队列,正确用法是持锁检查条件、循环等待,并在状态变化后通知。本文用任务队列示例解释信号丢失、虚假唤醒和关闭退出的处理边界。393 收藏 -
Golang · Go问答 | 2星期前 | go · 性能排查 · net/http · HTTP客户端 · httptrace · DNS tls 连接复用 httptrace Go问答 HTTP请求慢
Go HTTP 客户端变慢时,只看总耗时无法判断卡在 DNS、建连、TLS 还是服务端响应。本文用 httptrace.ClientTrace 采集分段时间,结合连接复用标记和最小复查清单,定位一次请求变慢的真正环节。393 收藏 -
Go 的传统 encoding/json 会把 nil slice 编码为 null,把已初始化的空切片编码为 []。先由接口契约决定返回形状,再在成功响应的边界归一化并用测试锁定,避免前端空列表处理出现分支。392 收藏 -
Go 用 bufio.Scanner 读取日志、CSV 或命令输出时,遇到超长行可能直接停止。本文用最小实验复现 token too long,解释 Buffer、MaxScanTokenSize、SplitFunc 的关系,并给出 Scanner 与 bufio.Reader 的选型边界。391 收藏 -
Go 的 url.Values 既能表达同名重复参数,也能表达单值参数,但 Add、Set 和 Encode 的组合会直接影响服务端拿到的结果。本文用标签筛选接口说明参数如何构造、编码、解析和验收。386 收藏 -
接口能返回 200,不代表客户端真的能用。本文用 Go 标准库 httptest.NewServer 从零写一个小型接口烟雾测试器,逐步检查状态码、Content-Type、JSON 字段和超时,并给出适合 CI 的验收边界。385 收藏 -
处理 Go 的 io.Reader 时,EOF 不一定意味着本次没有数据。本文用一个无换行结尾的文本例子拆开 n>0 与 io.EOF 同时出现的情况,给出读取循环、bufio.Reader 和测试核对方法,避免丢掉最后一段内容。384 收藏 -
Go 在 range 遍历 map 时允许删除尚未访问的键,但遍历顺序本来就不稳定,新增元素也不能依赖是否会被访问。本文用小实验区分语言保证、实现现象和可测试的安全写法。384 收藏 -
Go HTTP 中间件看起来只是函数嵌套,但鉴权、限流、日志和业务处理的顺序会直接影响安全性、指标口径与资源消耗。本文用一条订单接口链路说明中间件的组合方式、顺序取舍和可验证边界。382 收藏 -
Go 回调接口是否都应该返回 error?从同步确认、异步投递和后台任务三个场景拆解接口设计,给出可落地的签名、错误归属和判断清单。382 收藏 -
浏览器会在请求中带上 Sec-Fetch-Site 等 Fetch Metadata。用一层 Go 中间件先区分 same-origin、cross-site 和缺失请求头,再与 CSRF、Origin 校验配合,可以为敏感接口补上一道跨站访问边界。349 收藏