Go问答技术文章
-
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 收藏 -
Go runtime/trace.NewTask 为跨函数、跨 goroutine 的逻辑工作流创建携带 task 的 context,再用 Log、WithRegion 和 Task.End 组织执行追踪。本文只讲任务边界、上下文传播和结束时机,不展开 pprof 性能剖析。411 收藏 -
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 收藏 -
Go x/text/search 不是按字节或 rune 逐个比较文本,而是结合语言规则生成可比较的排序元素。因此带重音、大小写、宽度差异,甚至展开与合并关系的文本,可能在不同原始长度下匹配。本文说明 Matcher 选项、IndexString 返回区间和 Pattern 复用边界。410 收藏 -
Golang · Go问答 | 4星期前 | error · api设计 · database/sql · Go问答 · database/sql errors.Is 错误封装 Go错误处理 错误转换 领域错误
Go 业务层通常不应直接暴露 sql.ErrNoRows 或具体驱动错误。本文用稳定领域错误、私有 cause、操作上下文和 errors.Is,兼顾调用方判断、内部诊断与数据库实现可替换性。409 收藏 -
Golang · Go问答 | 3星期前 | go · 文件上传 · Go教程 · net/http · Multipart表单 ParseMultipartForm mime/multipart Go文件上传 Go MultipartReader
MultipartReader 与 ParseMultipartForm 不是两种可叠加的读取方式,而是同一请求体的两种互斥所有权模型。本文结合标准库源码解释冲突标记、隐式触发入口、流式与整体解析示例,以及请求体上限、临时文件清理和中间件边界。409 收藏 -
Go 服务收不到 SIGTERM 时,先核对目标 PID,再比较容器入口是否把信号留在 shell,最后用 NotifyContext 把信号接入服务生命周期。本文只围绕 PID、容器入口和 Go 接收代码给出排查与选择方案。409 收藏 -
Scanner.End 返回 token.Pos。若要得到文件名、行号和列号,应使用初始化 Scanner 时的 token.File.Position 转换;所谓 PositionEnd 不一致通常是类型、字节偏移或合成 token 边界混用造成的。409 收藏 -
Go 1.27 的 encoding/json/jsontext 中,Token.Int、Uint、Float 等数值访问器为什么返回 error?本文按 JSON 数值形态说明语法错误、范围错误、截断和精度边界。409 收藏