Go问答技术文章
-
Go 程序明明调用了 Write,退出后日志文件却少了最后几行,常见原因不是字符串没生成,而是 bufio.Writer 仍留在用户态缓冲区,或 Flush、Close 的错误没有被检查。本文用一个退出前丢日志的场景,拆开缓冲写入、defer 执行时机、Flush 与 Sync 的边界,并给出可复测的收尾写法。496 收藏 -
Golang · Go问答 | 4星期前 | golang · HTTP · Context · net/http · Go问答 · Http请求 net/http context header Go问答 Request.Clone
net/http.Request.Clone 会复制请求的大部分结构和 Header,但不会复制 Body 的底层读取位置。本文用重试与多下游请求场景拆开 Body、Header、URL 和 Context 的独立性边界。496 收藏 -
遇到 concurrent map writes 不要只给 map 加锁了事。本文从最小复现开始,用 -race 报告定位共享访问,再按互斥、单所有者和 sync.Map 的边界完成修复。496 收藏 -
Go 的 http.Client.Do 返回 404 时 err 仍可能是 nil,因为非 2xx 状态属于服务器响应,不是传输错误。本文区分 err、StatusCode 和响应体读取错误,给出关闭 Body、限制错误正文并映射业务错误的写法。496 收藏 -
Go test 输出 cached 并不等于测试失效,而是成功的包测试结果被复用。本文说明如何用 -count=1 强制重跑、用 -run 和 -v 定位目标,以及何时使用 go clean -testcache。496 收藏 -
迁移 Go 构建约束时,//go:build 与 // +build 必须表达同一条件;理解空格、逗号和多行的逻辑,再用 gofmt、go vet 和跨平台构建检查结果。496 收藏 -
Go 类型别名只是原类型的另一个名字,定义类型则创建独立类型;本文用类型身份、接收者和接口断言解释两者的方法集差异。496 收藏 -
errors.Join 返回的是可遍历的错误树,业务判断应直接使用 errors.Is;需要展示全部原因时再读取 Unwrap() []error,不能依赖字符串拆分或 errors.Unwrap。495 收藏 -
Go database/sql 连接池参数怎么配?本文用 MaxOpenConns、MaxIdleConns 和 ConnMaxLifetime 做一次最小实验,区分连接不足、等待过长与连接复用失效,并给出可验收的指标。494 收藏 -
Go 1.24 新增的 strings.FieldsSeq 返回 iter.Seq[string],按 unicode.IsSpace 识别连续空白并逐项产生字段。本文对比 Fields,说明空文本、Unicode 空白、提前停止和结果保存的边界。494 收藏 -
atomic.Value 先保存 int 后保存 string 为什么会 panic?本文解释 any 背后的动态具体类型,并用固定 Snapshot 外层结构安全承载多种业务数据。494 收藏 -
Go ServeMux 将尾斜杠模式视为子树,访问子树根的无尾斜杠路径时会默认重定向。本文用 httptest 验证状态码与 Location,并说明如何注册精确路径覆盖默认规则。494 收藏 -
Go Webhook 先验签再解析却得到 EOF,通常不是 JSON 有问题,而是 r.Body 已被提前读完。用单一读取边界、长度限制和常量时间比较,把验签与业务解析放回同一条可信数据路径。493 收藏 -
Go 1.24 的 os.Root 和 os.OpenInRoot 如何把不可信文件名限制在指定目录内,本文用最小代码说明路径穿越、符号链接与 Close 的边界。493 收藏 -
Go 的 URL.Path 保存解码后的路径,RawPath 只用于保留有效的原始编码提示;如果把已编码字符串直接放进 Path,URL.String 或 HTTP 客户端会再次转义百分号,形成 %252F。493 收藏