Go问答技术文章
-
Go atomic.Value.Swap 会把新值写入原子容器并返回替换前的值;首次调用返回 nil,但新值不能为 nil,后续调用还必须保持同一具体类型。本文用配置快照场景说明如何安全接住旧值并处理边界。334 收藏 -
sync.Once 保证回调只执行一次,并不保证执行到成功。文章区分永久保留首次结果、启动初始化与成功缓存,给出互斥保护的可重试配置示例,并说明取消等待、重试频率和资源生命周期的限制。229 收藏 -
Go sync.Pool 中对象放入后很快消失并不一定是并发错误,本文解释临时复用池的生命周期边界,并比较 Pool、带锁 map 与有界 channel 的适用场景。139 收藏 -
sync.Map 不是普通 map 的通用替代品。本文从高频覆盖写、固定值类型、多字段更新和 Range 遍历四个信号判断适用边界,并给出 Mutex、RWMutex 与组合方法的回滚方案。500 收藏 -
strings.Builder 已使用后不能按值复制,副本继续写入可能触发异常。本文定位参数、结构体和切片中的隐式复制,给出指针协作与字符串前缀重建两种迁移方式,并解释长度为零和未触发 panic 的误区。149 收藏 -
Go 普通 map 并发读写会触发数据竞争,严重时出现 fatal error。本文按访问边界说明原因,并比较 mutex、RWMutex、单协程所有权与 sync.Map 的适用场景。319 收藏 -
Go bytes.Buffer.Bytes 返回的是未读区切片视图,不是独立副本。本文说明 Read、Write、Reset、Truncate 为什么会让旧数据变化,并给出稳定快照的复制写法。457 收藏 -
Go regexp 中文匹配为空时,按输入、UTF-8 码点、ASCII 字符类、Unicode 类和字节下标逐项排查,解决中文匹配与位置错位问题。496 收藏 -
Go gzip 解压出现校验错误时,优先检查压缩流是否完整收尾、读取是否到达 EOF,以及多成员流和网络截断边界。321 收藏 -
Go ZIP 文件名乱码通常不是压缩内容损坏,而是文件名字节、UTF-8 标志和解压工具的本地编码解释不一致。本文从 archive/zip 的 Writer、Reader 和 NonUTF8 语义出发,给出创建端与旧包读取端的处理边界。352 收藏 -
Go tar 的 unexpected EOF 通常意味着头部、正文或外层输入提前结束。通过只读遍历保留条目名和读取阶段,区分正常 EOF、声明长度不足、生产端未收尾及压缩传输截断。372 收藏 -
Go 读取 CSV 时出现逗号字段错位,通常是把字段内容里的逗号当成了分隔符,或输入没有遵守引号规则。本文用 encoding/csv 说明 Reader、FieldsPerRecord、ParseError 和 Writer 的正确处理方式。109 收藏 -
围绕 Go tls.Config.VerifyConnection 说明握手回调顺序、ConnectionState 观测、恢复会话与自定义证书校验的边界,给出可落地的记录和错误返回方案。167 收藏 -
Go Reader 读到最后一行没有换行时,先区分输入没有终止符、Scanner 去掉换行和 EOF 处理顺序,再选择保留原文或在展示层显式补换行。264 收藏 -
Go OpenFile 追加写仍覆盖文件,通常不是 Write 本身失效,而是 flags 中混入 O_TRUNC、实际使用了 os.Create,或每次循环重新打开文件。本文按现象排查 flags、打开生命周期、Seek 与 WriteAt,给出可直接改造的追加写法。200 收藏