Go教程技术文章
-
配置文件写入成功并不等于断电后一定保留。本文用 Go 的临时文件、os.File.Sync、os.Rename 和目录同步串起安全替换流程,解释每一步解决什么问题,以及如何用重启和故障注入思路核对结果。250 收藏 -
用 Go 检查外部命令启动时会继承哪些环境变量,演示 Cmd.Environ、Cmd.Env 与 LookPath 如何配合,让本地和生产环境的启动条件更容易复现。250 收藏 -
用 Go net/url.URL.JoinPath 处理接口基础地址与资源路径的拼接,说明重复斜杠、绝对路径片段、查询参数和转义边界,给出可测试的请求地址写法。248 收藏 -
Go 1.25 将 testing/synctest 从实验功能带到标准库可用状态,本文用超时重试测试说明如何替换旧开关、检查虚拟时间语义并让 CI 稳定验收。245 收藏 -
Golang · Go教程 | 2天前 | 标准库 · golang · 性能优化 · 接口设计 · 性能优化 Go字符串 缓冲区复用 encoding.TextAppender MarshalText
Go 1.24 的 encoding.TextAppender 让类型可以直接把文本追加到已有字节缓冲区,适合日志、协议编码和批量格式化场景。本文从 MarshalText 的临时分配问题出发,说明 AppendText 的实现边界、错误传播和可验证的基准写法。245 收藏 -
Go 泛型约束既能描述可参与运算的类型集合,也能要求调用方具备指定方法。本文用一个带 String 方法的泛型容器,拆开接口组合、~ 底层类型和方法集的边界,解释常见 cannot use 报错该怎么定位。245 收藏 -
Go 的 crypto/subtle.ConstantTimeSelect 适合在两个整数结果之间做常量时间选择,但它不能替代完整的密码学实现。本文从掩码、输入约束、编译验收和错误用法说明它的边界。244 收藏 -
用 Go runtime/trace 的 Task、Log 和 Region 标记一次异步请求,把采集、查看与代码验证串起来,帮助定位跨 goroutine 的阶段耗时和事件顺序。244 收藏 -
time.Duration 本质是纳秒数量的 int64 别名。参与整数除法时结果会向零截断,先明确单位和余数,再决定是否转换为浮点或保留纳秒精度。242 收藏 -
go/ast.Preorder 从 Go 1.23 开始返回 iter.Seq[ast.Node],适合用 range 按深度优先顺序读取语法树。本文用一个真实的 AST 分析小工具说明如何解析源码、按节点类型筛选、在找到目标后自然停止,并比较 Inspect 的控制方式。239 收藏 -
slices.Collect 能把 iter.Seq 变成切片,但空序列的结果、容量预估和重复遍历边界容易被忽略。本文用最小代码拆开收集过程,并给出选择容量策略的判断方法。236 收藏 -
Golang · Go教程 | 2天前 | 标准库 · golang · go · 性能 · 内存管理 · 代码排错 · 内存分配 性能优化 CAP bytes.Buffer Go教程 len Grow
bytes.Buffer 的 Grow 不是越大越好:它只保证后续写入有足够空间,Len 与 Cap 观察到的是不同维度。本文用请求拼装和最小测试说明如何估算容量、何时提前 Grow,以及如何验证扩容是否真的减少了分配。234 收藏 -
io.ReadAll 写起来很短,但它会把输入完整收集到一个字节切片中。本文从大响应和未知长度输入的现场出发,解释 len/cap 增长、峰值内存与分块读取的边界,给出可复查的 Go 代码。231 收藏 -
Golang · Go教程 | 22小时前 | 日志 · 标准库 · 性能 · Go教程 · log/slog · Go 日志级别 log/slog Logger.Enabled Handler.Enabled Attr
Go log/slog 的 Logger.Enabled 会在日志参数处理前询问 Handler 是否接收当前级别。本文用可运行示例说明昂贵参数计算、slog.Attr 构造和 LogAttrs 的边界,避免关闭日志时仍付出无效成本。231 收藏 -
用 Go 的 weak.Pointer 做一个不会长期抓住对象的弱缓存,解释 runtime.KeepAlive、Load 与 GC 回收之间的边界,并给出可复现的并发读取写法。229 收藏