Go问答技术文章
-
Go HTTP 客户端拿到响应头后,resp.Body 仍由调用方负责读取和关闭。本文按只看状态码、读取正文、循环请求三种场景说明 Body 未关闭为何会降低 HTTP/1 连接复用,以及如何用最小改动修复。473 收藏 -
Go 的 hex.DecodeString 不会自动忽略十六进制字符串中的空格。本文用 strings.Fields 统一清理空白,再检查空输入、奇数长度和非法字符,并说明什么时候不应该静默删除分隔符。473 收藏 -
Go encoding/csv 读取 CSV 时遇到字段数量变化,通常是 FieldsPerRecord 的契约与实际文件不一致。本文区分严格定宽、首行定宽和允许变长三种模式,并给出带行号定位的处理方式。473 收藏 -
Go os.CopyFS 遇到符号链接时不是读取链接目标,而是读取链接本身并在目标目录重建链接。本文区分缺少 fs.ReadLinkFS、目标已存在和系统权限三类失败原因。473 收藏 -
Go 的 github.com/pkg/sftp 中,File.Close 释放远程文件句柄,Client.Close 关闭 SFTP 会话;本文用资源层级、defer 和错误处理示例说明两者的区别与正确关闭顺序。473 收藏 -
Go 的 os.Rename 在 Windows 上失败,常见原因是文件句柄未关闭、目标路径是目录或跨目录限制。本文用 LinkError 保留上下文,并给出同目录临时文件发布方式。472 收藏 -
Zerolog 的 diode.Writer 为了让日志生产者不被慢速输出端阻塞,会把事件放入有容量的非阻塞队列;消费跟不上时,队列满的部分会被丢弃。本文解释丢失原因、missed 告警和关闭策略。472 收藏 -
bytes.NewBuffer 会把传入的 []byte 作为初始缓冲区内容使用,不会替调用方自动复制。本文说明原切片修改为何会影响后续读取,以及如何用 bytes.Clone 或显式复制隔离数据。472 收藏 -
Go runtime/metrics.Read 可以复用同一个 []metrics.Sample,但要区分串行采样、并发底层内存和直方图深拷贝边界。本文给出可落地的定时采样写法。472 收藏 -
Go os.Lstat 的结果通常并不是随机变化,而是读取对象、错误分支或并发替换窗口没有分清。本文用快照、ModeSymlink 和 PathError 说明排查顺序,并给出稳定观察文件状态的写法。472 收藏 -
os.MkdirTemp 不接受 perm 参数,而是按 0700 创建临时目录。本文解释这一安全边界、umask 影响、清理责任,以及多进程确需共享时的处理方式。472 收藏 -
Golang · Go问答 | 3星期前 | 并发 · 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 收藏