Go问答技术文章
-
Go os.ReadFile 失败时,先用 errors.Is 区分路径不存在与权限拒绝,再通过 *os.PathError、os.Stat 和父目录权限定位目录误当文件、路径上下文和运行身份问题。472 收藏 -
Go context.WithValue 的字符串键可能与其他包发生相等值碰撞,导致值被意外覆盖或读取。本文解释可比较键与唯一键的区别,并给出包内自定义类型、类型安全访问器和迁移排查清单。472 收藏 -
Go 的 os.Rename 在 Windows 上失败,常见原因是文件句柄未关闭、目标路径是目录或跨目录限制。本文用 LinkError 保留上下文,并给出同目录临时文件发布方式。472 收藏 -
Zerolog 的 diode.Writer 为了让日志生产者不被慢速输出端阻塞,会把事件放入有容量的非阻塞队列;消费跟不上时,队列满的部分会被丢弃。本文解释丢失原因、missed 告警和关闭策略。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星期前 | 并发 · map · Mutex · go · Go sync.Map sync.Mutex concurrent map writes map 并发写入
Go map 并发写入可能直接触发 concurrent map writes。本文从只读与更新边界讲起,解释不同键为什么仍不安全,再对比 mutex、RWMutex、单 goroutine 所有权和 sync.Map 的适用场景,并用竞态检测器做回归检查。471 收藏 -
Go HTTP/3 客户端可通过 RoundTripper 隔离业务接口,用互斥文件控制构建。但运行时关闭和构建标签不等于模块可选,工具链兼容还需按依赖版本处理。471 收藏 -
io.ReadAll 会把输入一直读到 EOF 并返回完整字节切片。本文按是否需要完整内容、能否设置大小上限和是否可以边读边处理,给出 LimitReader、固定缓冲区与 io.CopyBuffer 的选择方法。471 收藏 -
Go io.Copy 本身不会因为文件很大就把整个文件读入内存。遇到内存异常增长时,应先检查 WriterTo、ReaderFrom 快路径,再排除 bytes.Buffer、io.ReadAll 和长期引用等累计路径。471 收藏 -
Go database/sql 的 Result.RowsAffected 不是所有数据库驱动都支持。本文区分执行错误、可信影响行数、零行结果和驱动不支持,给出不误判、不重复执行的处理方式。471 收藏 -
Go 的 append 是否修改调用方,关键取决于切片共享的底层数组和剩余 cap。本文拆解 len、cap、返回值、三下标切片与复制边界。471 收藏 -
区分 Go debug/dwarf 中两个 SeekPC 的查询对象,按地址空间、DWARF 范围和返回地址偏移排查 ErrUnknownPC,并给出重复查询的索引方案。471 收藏 -
Quit执行SMTP协议退出,Close直接关闭连接。通过原创生命周期示例与两张结构图,说明Quit失败时的清理兜底、错误保留和邮件业务结果的区别。471 收藏