Go问答技术文章
-
sort.Search 找不到目标时返回 len 并不是越界,而是把第一个满足条件的位置定义为插入点。本文用单调谓词、边界表和可运行代码说明闭区间、找不到与插入位置的关系。411 收藏 -
解析 go test -json 时,关键不是逐行打印 JSON,而是按 Package 和 Test 保存事件流,再依据 Action 还原测试状态与输出。本文给出字段边界、并行处理和常见坑。411 收藏 -
go generate 找不到生成器时,问题通常是 GOBIN 没进入 PATH。本文比较 Go 1.24+ 的 tool/go tool、仓库相对路径和带版本 go run,给出本机与 CI 都能复现的固定方式。411 收藏 -
通过 Go runtime/pprof 的 block Profile 记录同步阻塞累计时间,再用 go tool pprof 的 top、list 和调用图定位锁、channel 与 WaitGroup 的等待点。411 收藏 -
解释 Go API 中 nil slice 与空 slice 的 JSON 差异,给出响应边界归一化、omitempty 边界和 encoding/json v1/v2 迁移测试方案。411 收藏 -
bbolt.Open 默认会等待数据库文件锁,数据库已被其他进程占用时可能长期不返回。本文说明如何设置 Options.Timeout,识别 ErrTimeout,并处理 Close、重试和残留进程等边界。411 收藏 -
Go time.Parse 出现差几个小时,通常不是时间被随机改写,而是输入中的时区信息与解析 API 的默认语义不一致。本文对比数字偏移、时区缩写、ParseInLocation 和 Time.In 的使用边界。411 收藏 -
Go http.Server.ErrorLog 的类型是 *log.Logger,适合接收连接错误、Handler 异常和底层文件系统错误。本文用并发安全的 io.Writer 适配器把标准库消息输出为 JSON 行,并区分访问日志与 ConnState 的职责边界。411 收藏 -
Go tar 解包应分别处理条目名与链接目标。本文采用默认拒绝链接的严格策略,用 os.Root 与私有暂存目录限制实际写入,并说明词法检查、平台差异及资源预算边界。411 收藏 -
sync.Cond 的难点不是调用 Broadcast,而是让共享状态、锁和等待条件保持同一条时间线。本文用一个任务队列场景拆解 Wait、Signal、Broadcast 的正确顺序、常见误区与可验证写法。410 收藏 -
Go 写文件时,os.File.Sync 成功并不等于包含它的目录项也完成持久化。本文用临时文件、重命名和目录同步的完整流程,说明崩溃恢复时该看哪些边界。410 收藏 -
Golang · Go问答 | 2星期前 | 错误处理 · Go问答 · Go net/http ResponseController ErrNotSupported SetReadDeadline SetWriteDeadline
Go HTTP 服务端调用 ResponseController 设置读写 deadline 时,如果返回未支持错误,通常不是 deadline 参数写错,而是当前 ResponseWriter 或包装链没有暴露对应能力。本文说明如何用 errors.Is 判断 ErrNotSupported、修复 Unwrap 包装器,并为不支持连接 deadline 的场景保留安全降级方案。410 收藏 -
Go 基准测试初始化被算进 ns/op 时,先确认计时边界。本文说明 b.Loop、b.N、ResetTimer、StopTimer 和 StartTimer 的正确分工,并处理每轮必须准备输入的场景。410 收藏 -
HTTP/2 的 GOAWAY 不是普通业务错误,它表示连接不再接受新流,并用 last-stream-id 划出可能已处理的范围。本文结合 Go net/http 的请求体重放条件,给出幂等请求、非幂等请求和监控证据的有限重试策略。410 收藏 -
io.TeeReader 没有内部缓冲,读取过程会把数据同步写给 Writer;如果 Writer 写入失败,错误会沿 Reader 的 Read 返回。本文从接口职责、n 与 err 的判断和适用边界解释这个看似延迟的错误。410 收藏