Go语言技术文章
-
Golang · Go问答 | 3星期前 | 闭包 · go · 垃圾回收 · Go问答 · Go 生命周期 垃圾回收 keepalive Stop runtime.AddCleanup 清理函数 对象捕获
Go runtime.AddCleanup 的 cleanup 和 arg 不能反向持有 ptr,否则目标对象不会变成可回收状态;本文用参数化清理、KeepAlive、Stop 和并发边界说明如何安全设计清理函数。237 收藏 -
Go 子进程的 Cmd.Env 为 nil 时默认继承父环境,显式切片会替换环境。本文比较继承与覆盖,说明 Dir、环境快照和输出管道的取舍,并提供自启动探针。237 收藏 -
Go crypto/ecdh.PublicKey.Bytes 会返回公钥编码的副本,适合放入协议字段或持久化格式;接收端应使用同一曲线的 NewPublicKey 重新解析,并用 Equal 与 Curve 区分对象相等和曲线匹配。本文给出最小写法、错误处理和常见边界。237 收藏 -
Go 的 http.Transport 默认会缓存连接,但连接池并不是无条件复用。每次重新创建 Transport、Response.Body 没有读完并关闭、主动关闭 keep-alive、空闲连接超时、每主机连接上限以及服务端协议设置,都可能让请求重新建连。本文用 httptrace 定位原因,并给出稳定的 Transport 管理方式。237 收藏 -
sql.NullString 用于接收数据库 NULL,但它没有把自身自动编码为 JSON null。本文从 String、Valid 两个字段解释输出为何是对象,并给出接口层输出 null 的两种稳妥写法。237 收藏 -
本文用一个升序整数切片说明 Go sort.Find 的比较函数写法、found 结果判断、重复值定位和插入位置边界,重点解释为什么 cmp 必须保持正数、零、负数三段结构。237 收藏 -
Go 使用 nats.go 异步订阅时,回调处理速度落后会让订阅 pending 队列上涨并触发慢消费者。本文解释消息数与字节数限额、Pending/Dropped 证据、SetPendingLimits 的边界,以及客户端队列与服务端连接缓冲的区别。237 收藏 -
Go url.URL.Redacted 会像 URL.String 一样重组地址,但只把 u.User 中的密码替换为 xxxxx。本文用解析、日志和错误处理场景说明如何安全输出带凭据的 URL,并厘清查询参数、片段和真正请求发送之间的边界。237 收藏 -
用 Go 1.24 的 os.OpenRoot 固定文件访问根目录,再结合 bufio.Reader.Peek 查看文件头而不推进读取位置;文章同时说明短文件、缓冲区大小、越界路径和符号链接边界的处理方式。237 收藏 -
用 os.DirFS 和 io/fs.WalkDir 遍历一个目录,保留 Go 文件系统约定的相对路径;本文从根目录、回调错误、普通文件筛选和 filepath 转换几个体验点说明如何写成可复用的小函数。237 收藏 -
Go 模糊测试发现失败输入后,会把最小化样本写入 testdata/fuzz。本文说明如何用 -run 单独复现、提交种子文件,并让普通 go test 持续执行这条回归用例。237 收藏 -
Go runtime trace 里出现 goroutine 阻塞并不一定是锁竞争,也可能来自网络、系统调用或调度延迟。本文按事件与等待原因拆解分析路径,并说明何时切换到 pprof。236 收藏 -
使用 Go base64.NewEncoder 和 io.Copy 流式编码文件,避免一次性读取大文件,并正确处理 Close 收尾、填充和错误返回。236 收藏 -
Go filepath.VolumeName 用于提取路径开头的卷名:Windows 盘符路径返回 C:,UNC 共享路径返回 \\host\share,其他平台返回空字符串。本文用跨平台示例拆解返回边界,并说明它与绝对路径判断、路径清理和安全校验的区别。236 收藏 -
Go 的 sync/atomic.Bool 适合维护一个被多个 goroutine 访问的开关状态。本文从普通 bool 的竞争现象出发,说明 Load、Store、Swap、CompareAndSwap 的使用边界,以及复制和复合状态不能混用的问题。236 收藏