Go语言技术文章
-
解释 Go sync.WaitGroup 把 Add 放进 goroutine 的竞态窗口,并给出先计数再启动任务的安全写法、循环边界和排查清单。308 收藏 -
Go os.OpenFile 的第三个参数不是跨平台 ACL 开关。本文拆分 flag、perm、Windows 只读属性和 ACL,解释 0644 在 Windows 上为何不能等同于 Unix 权限,并给出跨平台写文件的排查清单。308 收藏 -
Go 的 container/heap 读取分三种场景:只读堆顶、用 heap.Pop 消费原堆,以及复制堆后得到有序快照。本文用最小堆示例说明索引 0、Less 规则、空堆判断和指针元素的边界。308 收藏 -
Go modgo 报错时,实际应从 go.mod 的 go 指令、模块图和 tidy 三个边界排查。本文用 go env GOMOD、go list -m all、go mod graph、go mod why -m 和 tidy -diff 定位依赖变化来源。308 收藏 -
用 Go testing.T.TempDir 替代手工临时目录清理,掌握测试文件隔离、并行子测试、GOTMPDIR 与迁移边界。308 收藏 -
Golang · Go问答 | 2个月前 | GC · sync.Pool · bytes.Buffer · 内存优化 · Go问答 · Go 垃圾回收 内存占用 对象池 sync.Pool bytes.Buffer buffer复用
Go 服务用 sync.Pool 复用 bytes.Buffer 后,流量回落时 RSS 仍高并不一定是泄漏。本文从大容量底层数组被放回池、GC 回收节奏和运行时向系统归还内存三个层面复现问题,给出容量上限与 pprof 验证方法。307 收藏 -
os.ReadFile 适合一次性读取小文件,但面对超大配置会把完整内容装入 []byte。本文比较 os.ReadFile、os.Open 与 bufio.Reader 的使用边界,给出按行分块解析和可复查的内存控制方法。307 收藏 -
strings.Builder 的 Grow 只保证后续写入有足够容量,并不等于最终字符串长度。本文用一段可运行的 Go 示例拆开 Grow、Cap、String 和 copyCheck 的关系,说明什么时候该预留容量、为什么不能复制非零 Builder,以及如何验证结果。307 收藏 -
用 runtime/trace.NewTask 给跨 goroutine 的业务操作建立可追踪边界,说明 context.Context 如何传播任务、task.End 如何收口,以及 trace.WithRegion 与 go tool trace 的分工。307 收藏 -
普通 []byte(s) 转换得到可写字节切片,修改它不会回写原 string;中文按字符修改应使用 []rune,结果再按需转回 string。307 收藏 -
Go 处理回调地址时,Path、RawPath、EscapedPath 和 RawQuery 的语义并不相同。本文用 net/url 示例说明路径解码、查询参数、编码斜杠以及 PathEscape 与 QueryEscape 的正确边界。307 收藏 -
Go 先用 image.DecodeConfig 读取图片格式、宽高和颜色模型,再按像素预算决定是否调用 Decode,适合上传校验和内存保护。307 收藏 -
Golang · Go问答 | 2星期前 | go · Go File.WriteAt 并发写 Go 文件分片写入 Go os.File 并发安全 Go WriterAt 不重叠区间 Go O_APPEND WriteAt
Go 的 os.File 可以被多个 goroutine 并发调用,但 File.WriteAt 是否安全取决于写入区间、打开模式、缓冲区生命周期和错误处理。本文用分片写入示例说明可行边界。307 收藏 -
用 context.WithTimeout 和 exec.CommandContext 给外部命令设置截止时间,区分超时终止、启动失败与正常退出,并说明子进程清理边界。307 收藏 -
Go HTTP 客户端请求成功后,Response.Body 需要正确读取和关闭,否则 Transport 可能无法复用 keep-alive 连接。本文用代码和排查表说明未关闭、未读完、提前返回及 Client 复用的处理边界。307 收藏