Go教程技术文章
-
Go 的 encoding/binary.NativeEndian 适合读取本机格式,但不应直接替代协议字节序。本文用一个二进制记录示例拆开 NativeEndian、unsafe 转换和跨机器可移植编码的边界。267 收藏 -
Go 的 hash/maphash 用 Seed 把哈希随机性与具体计算分开。本文通过可运行示例说明 MakeSeed、Seed 复用、Hash.SetSeed 与不可序列化边界,帮助你在内存索引中稳定使用它。265 收藏 -
线上接口延迟升高时,goroutine 画像能帮助定位到底是 channel、锁还是外部调用在等待。本文从可见症状开始,结合 runtime/pprof 的 goroutine 采样、状态分类和可复现验证,拆出一条不靠猜的排查路径。263 收藏 -
Go 标准库 flag 默认把一个参数当成一个值。本文用自定义 flag.Value 收集重复参数,说明切片初始化、空值校验、错误提示和最终读取的边界。259 收藏 -
用 Go 1.24+ 的 os.OpenInRoot 和 os.Root 将文件打开限制在指定目录内,理解相对路径、符号链接、错误边界与旧代码迁移方式。256 收藏 -
Go slog.LevelVar 适合把日志级别做成可并发更新的运行时开关。本文用一个 HTTP 管理入口演示 LevelVar、Handler 与回滚配置的配合,重点核对动态生效、并发读取和错误配置不污染当前级别。255 收藏 -
Go 的 io/fs.ReadDir 会按文件名排序返回目录项,但底层 ReadDirFile、os.File.ReadDir 和错误场景的行为并不完全一样。本文从一次目录索引顺序错乱的排查开始,拆清排序、部分结果和测试边界。253 收藏 -
Go 1.27 新增标准库 uuid 包。本文用 NewV7、Parse、Compare 和 String 拆开时间排序、格式兼容、非法输入与零值边界,给出可运行的请求标识示例。251 收藏 -
Go 1.23 的 maps.Keys 返回 iter.Seq,遍历顺序仍不保证稳定。本文从 for range 与 maps.Keys 的关系出发,演示如何用 slices.Sorted 得到可复现的键序列,并说明排序成本与兼容边界。251 收藏 -
配置文件写入成功并不等于断电后一定保留。本文用 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教程 | 3天前 | 标准库 · golang · 性能优化 · 接口设计 · 性能优化 Go字符串 缓冲区复用 encoding.TextAppender MarshalText
Go 1.24 的 encoding.TextAppender 让类型可以直接把文本追加到已有字节缓冲区,适合日志、协议编码和批量格式化场景。本文从 MarshalText 的临时分配问题出发,说明 AppendText 的实现边界、错误传播和可验证的基准写法。245 收藏 -
Go 泛型约束既能描述可参与运算的类型集合,也能要求调用方具备指定方法。本文用一个带 String 方法的泛型容器,拆开接口组合、~ 底层类型和方法集的边界,解释常见 cannot use 报错该怎么定位。245 收藏