Go语言技术文章
-
Go pprof 里的 CPU、mutex 和 block profile 关注的不是同一件事。本文用一个采集窗口说明三者的开关、命令、栈位置和适用边界,帮助你判断到底是 CPU 忙还是 goroutine 在等锁、等通道。250 收藏 -
Go atomic.Pointer 的 Load 返回 nil,只能说明当前没有对象,不能区分零值未初始化和曾有对象后被 Store(nil) 清空。本文用额外状态位和 CAS 说明如何设计可判断的生命周期状态。250 收藏 -
讲清 Go slices.Grow 的额外容量参数、返回值和循环位置:按预计总数计算剩余数量,在 append 前一次预留,避免把容量误当长度。250 收藏 -
讲清 Go slices.SortStableFunc 按团队、优先级等多个字段排序时的稳定比较器写法,说明比较结果、降序参数、等价元素和常见溢出误区。250 收藏 -
Go slog.Group 只传组名却看不到字段时,通常是空组被 Handler 忽略。本文区分空组、空 key 组和非空组,并说明 TextHandler、JSONHandler 与自定义 Handler 的处理边界。250 收藏 -
Golang · Go教程 | 4小时前 | channel · select · Context · 并发编程 · Go教程 · context取消 time.NewTimer goroutine退出 Go select channel超时
本文给出一个可复用的 Go select 写法,同时监听任务结果、局部超时和上游取消信号,并解释缓冲结果通道、派生 Context、CancelFunc、ctx.Err、计时器释放及多个 case 同时就绪时的处理边界。250 收藏 -
解释 Go 文件写入、Sync 和 Close 的边界,给出临时文件替换与错误处理的可验证写法。249 收藏 -
用 Go 的 io.Pipe 把数据生产、gzip 压缩和 HTTP 请求体串成流,讲清同步背压、错误传播、取消处理以及 Content-Length 和重试边界。249 收藏 -
sync.OnceFunc 的 panic 不是一次性失败后自动重试,而是被缓存并在后续调用中用同一个值再次 panic。本文拆解实现状态、栈信息差异和可重试初始化的替代写法。249 收藏 -
bytes.Reader 读到 EOF 后不会自动回到开头。本文用 Seek 重置读取游标,并比较 Seek、ReadAt、Reset 的参数语义、错误边界和适用场景。249 收藏 -
Go os/exec 启动命令后,相对路径默认跟随子进程工作目录。本文用 Cmd.Dir 设置独立目录,并区分目录不存在、命令失败和结果文件落点错误等常见问题。249 收藏 -
Go 1.25 已将 testing/synctest 从实验能力带入标准库,升级到 Go 1.26 后应移除 GOEXPERIMENT=synctest,并把旧实验 API 改成正式包导入;本文用最小并发测试说明迁移、检查与回退边界。248 收藏 -
用 Go net/url.URL.JoinPath 处理接口基础地址与资源路径的拼接,说明重复斜杠、绝对路径片段、查询参数和转义边界,给出可测试的请求地址写法。248 收藏 -
用一个可复现的流式上传场景说明 Go io.Pipe 的同步阻塞关系、错误回传路径和关闭顺序,避免生成端与上传端互相等待。248 收藏 -
Go 的 log/slog.Attr.Equal 适合做日志属性去重和断言,但组属性、数值类型与空值的比较边界容易被忽略。本文从字段和值的关系出发,给出紧凑写法和检查要点。248 收藏