Go问答技术文章
-
Go slog.Logger.With 会返回带属性的新 Logger,不会改写原 Logger。本文用并发请求和测试场景说明共享字段污染的成因、检查方法、隔离写法与验收边界。473 收藏 -
SetMemoryLimit 和 GOMEMLIMIT 都是在约束 Go 运行时内存预算,但它们不是硬性进程上限。本文用一个可复测的小程序说明 GC 频率、HeapReleased 与外部内存的边界,并给出压测和容器部署中的核对方法。473 收藏 -
解释 Go modernize/newexpr 为何暂不把显式 uint32、int64 泛型辅助函数改成 new(expr),并给出默认类型、显式转换与批量审查边界。473 收藏 -
context.Err 和 context.Cause 不是同一个答案。本文用父子 Context、首个取消者和原因转发三个边界,说明为什么只能得到 context.Canceled,以及日志该如何记录。473 收藏 -
go test -race 变慢通常是正常的检测成本。本文教你固定比较口径,拆分编译、执行、内存和覆盖率影响,并判断哪些测试值得长期运行 race。473 收藏 -
Golang · Go问答 | 2星期前 | channel · select · go · 并发控制 · Go select nil channel Go 动态禁用 select 分支 Go channel 状态控制 Go select 关闭频道
Go select 不能直接删除 case,但可以把参与选择的频道变量设为 nil 来动态禁用分支。本文用一个单值转发循环说明输入、输出、关闭频道和 default 的边界。473 收藏 -
客户端断开后,Go Handler 不会因为看到断开就自动停止全部代码;要让下游 HTTP、数据库和循环及时收尾,必须从 r.Context() 监听取消并继续向下传递。472 收藏 -
Go 的 http.Cookie 设置成功后,浏览器是否发送主要由 Path 与请求 URL 的路径匹配决定。本文解释显式 Path、默认路径、排查顺序,以及删除 Cookie 时的配对规则。472 收藏 -
Go os.ReadFile 失败时,先用 errors.Is 区分路径不存在与权限拒绝,再通过 *os.PathError、os.Stat 和父目录权限定位目录误当文件、路径上下文和运行身份问题。472 收藏 -
Go context.WithValue 的字符串键可能与其他包发生相等值碰撞,导致值被意外覆盖或读取。本文解释可比较键与唯一键的区别,并给出包内自定义类型、类型安全访问器和迁移排查清单。472 收藏 -
Go 用 os.Stat 判断文件是否存在时,不能把所有非 nil 错误都当成不存在。本文区分缺失、权限不足和其他系统错误,并给出 errors.Is 的安全写法。471 收藏 -
Go encoding/base64 的 DecodeString、Decode、AppendDecode 会忽略 CR 和 LF,但不会因此放行所有空白。本文梳理换行兼容边界、Strict 的真实作用,以及严格输入的处理方案。471 收藏 -
ContinueOnError 只让 FlagSet.Parse 返回错误,并不关闭 Usage 或诊断输出。本文拆解 FlagSet 的错误策略、Usage 回调和 Output,并给出静默、捕获及自定义帮助的写法。471 收藏 -
Golang · Go问答 | 2个月前 | golang · 并发编程 · bytes.Buffer · 内存管理 · Go问答 · bytes reset bytes.Buffer Go内存 切片别名
Go 里把 bytes.Buffer.Bytes() 返回的切片保存下来,再复用 Buffer 写下一条消息,旧数据为什么会跟着变化?关键在于 Bytes 返回的是底层数组视图,不是独立副本。本文用消息编码场景说明 Reset、切片别名、Clone 拷贝和并发边界,给出可复查的安全写法。470 收藏 -
Go 1.23 的 slices.Collect 能把迭代器收集成切片,但它不是零成本转换。本文从惰性生成、空序列、容量增长和大结果集几个边界入手,配合可运行代码说明什么时候适合收集,以及如何避免一次性占满内存。470 收藏