Go语言技术文章
-
Golang · Go问答 | 1星期前 | 并发 · pprof · 性能排查 · Go问答 · Go Goroutine pprof net/http/pprof runtime/pprof 并发排障
Go goroutine 泄漏的关键不是单看数量,而是定位长期阻塞且再也等不到解除条件的代码行。本文从数量趋势、runtime/pprof 栈、channel 与锁的退出条件入手,给出可复用的排查和修复路径。446 收藏 -
Go 的 multipart.FileHeader.Open 返回一个可读取、可关闭的文件接口。本文说明如何在打开成功后及时安排 Close,怎样分别处理读取与关闭错误,以及为什么它和 Form.RemoveAll 不是同一件事。446 收藏 -
Go url.Values 是 map[string][]string,直接赋值或复制切片引用会共享底层数组。本文用 make 与 copy 实现完整深拷贝,并说明单键隔离、Set 与 Add、nil 值、并发访问和 Encode 边界。446 收藏 -
Go constant.Val 面向底层机器值,ExactString 面向精确文本。本文按缓存键、代码生成、JSON 协议和数值计算拆分两者的适用场景,并说明字符串、浮点、复数与 Unknown 的边界。446 收藏 -
Go 服务端设置 TLS MinVersion 后旧客户端仍能连接,不一定是参数失效。本文从真实 TLS 终止点、配置挂载、握手结果和连接复用四个方向,给出可执行的排查方法。446 收藏 -
Go 1.21 以后,工具链选择由 GOTOOLCHAIN、go.mod 或 go.work 中的 go 与 toolchain 共同决定。本文按固定版本、PATH 复用和自动下载三种工程约束比较配置方式。446 收藏 -
用一个可复现的并发通知示例,说明 WaitGroup、关闭通道和超时断言怎样配合,避免 Go 测试偶发卡死或漏验收。445 收藏 -
govulncheck 的价值不是多报漏洞,而是把模块命中、包导入和漏洞符号可达分层。本文给出调用链核对、构建条件对齐及升级复核方法。445 收藏 -
fs.ValidPath 并不会因为反斜杠本身判定路径非法。本文拆开 io/fs 逻辑路径、Windows 本地路径转换和文件系统实现三层边界,说明如何正确处理跨平台路径。445 收藏 -
Go 的 CertPool.AppendCertsFromPEM 返回 true 只表示至少一个 PEM 证书解析成功,并不代表所有证书有效或已经建立信任链。本文拆解 true/false 边界,给出逐块诊断和 Certificate.Verify 的分层判断方法。445 收藏 -
Go 1.24 起可以用 http.Transport.Protocols 显式区分 HTTP/1、TLS 上的 HTTP/2 与未加密 HTTP/2。本文给出仅 HTTP/1 和 HTTP/1 加 TLS HTTP/2 两种配置,说明如何不加入 UnencryptedHTTP2,以及零值、ForceAttemptHTTP2 和版本边界。445 收藏 -
Go 的 context.WithoutCancel 可以让收尾任务不继承请求取消,但它没有 deadline 和 Done;正确做法是再包一层独立超时,并复制必要数据。445 收藏 -
maps.All 返回绑定原映射的惰性迭代器,并不会在创建时复制数据。本文从修改时点、迭代中变更和并发边界说明真实语义,并给出 maps.Clone 与有序快照写法。445 收藏 -
Golang · Go问答 | 1个月前 | 标准库 · 接口设计 · Go问答 · encoding/json · Go encoding/json json.RawMessage JSON字段 部分更新
Go 结构体使用普通指针时,字段缺失和显式 null 容易落到同一个 nil 状态。本文用 json.RawMessage 保留原始字段语义,区分缺失、null 和具体 JSON 值,并给出部分更新接口的处理方式。445 收藏 -
Go 交叉编译时报找不到系统库,通常不是 GOOS 或 GOARCH 本身写错,而是项目进入了 cgo 路径却没有目标平台的 C 编译器、头文件或链接库。本文按纯 Go 与 cgo 两条边界给出排查和构建方案。445 收藏