Go语言技术文章
-
Golang · Go问答 | 1天前 | HTTP客户端 · Go问答 · 排错 · Go net/http Transport Response.Body HTTP连接复用 io.ReadCloser
Go net/http 的 Response.Body 是 io.ReadCloser,关闭负责资源交接,是否读到 EOF 则会影响 HTTP/1.x 持久连接能否复用。本文解释只 Close 与读完再 Close 的差异,并给出小响应和大响应的处理写法。309 收藏 -
sync.Map 的 Range 适合遍历当前可见条目,却不提供并发快照。本文用 Store、Delete 与 Range 的交错过程拆开这个边界,并给出需要一致视图时的替代写法。308 收藏 -
Go 通过 cgo.Handle 把 Go 值暂存给 C 侧时,关键不是把指针强行塞过去,而是明确句柄的创建、回调取值和 Delete 释放边界。本文用一个回调桥接例子说明生命周期、并发与异常清理。308 收藏 -
解释 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 收藏 -
Go sync.Map.LoadOrStore 返回的 actual 是最终值,loaded 则说明这个值来自已有条目还是本次存入。本文结合空键、已存在键和并发竞争,说明如何用 loaded 判断初始化责任,避免把候选值误当成缓存结果。308 收藏 -
Go 的 uint64 乘法会静默保留低 64 位。本文用 math/bits.Mul64 拆出 128 位乘积,通过 hi != 0 判断溢出,并封装可复用的安全乘法函数。308 收藏 -
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 收藏