Go教程技术文章
-
项目同时维护 mock、stringer 和资源生成指令时,go generate -run 可以按指令完整原文的正则匹配只执行目标任务。本文从一次误触发现场讲清匹配范围、精确写法、预览排查和防复发约定。453 收藏 -
Go 1.21 起可以用 maps.Copy 将默认配置与覆盖配置合并到目标 map:src 的同名键覆盖 dst,目标映射会被原地修改。本文说明调用方向、nil 目标、浅拷贝和旧版本兼容写法。453 收藏 -
外部毫秒参数不要直接乘 time.Millisecond。本文用 Go 标准库写一个带格式、符号和上限检查的转换函数,处理精度、溢出与边界值。453 收藏 -
通过依赖注入让 Go 令牌生成函数接收 io.Reader:生产环境使用 crypto/rand.Reader,测试环境注入可重复字节流,稳定覆盖长度、编码和错误分支,同时明确测试替换不能进入生产路径。453 收藏 -
Go 用 slices.IndexFunc 按条件查找切片时,会返回第一个满足判断的元素索引;如果没有匹配项则返回 -1。本文说明空切片、重复匹配、结构体字段判断、Index 对比和旧工具链降级写法。453 收藏 -
说明 Go slices.BinarySearch 的升序输入前提、插入位置与命中标志,提供复制输入并构建整数索引的完整示例,解释空切片、重复值和末尾位置的边界,避免迁移旧查找代码时越界。453 收藏 -
Go os.CopyFS 可以直接把 embed.FS 这样的嵌入文件系统复制到磁盘。本文从批处理场景说明如何减少手写遍历、整文件读取和重复临时对象,并处理已存在文件、权限错误与复制边界。453 收藏 -
Go 的 exec.Cmd 可以通过 ExtraFiles 把父进程已经打开的管道或套接字传给子进程。关键规则是 ExtraFiles[i] 在子进程中从文件描述符 3+i 开始,而不是沿用父进程原来的编号。452 收藏 -
Go compress/flate 的输入相同并不保证压缩字节相同。本文解释压缩级别、字典、Flush、写入边界和 Go 版本如何影响编码,并给出需要字节级稳定时的固定条件。452 收藏 -
Go fsnotify 同时提供 Events 与 Errors 两个通道。本文从事件正常但错误丢失的排查场景出发,说明如何用一个 select 同时消费两个通道,区分关闭、监听错误与事件位掩码,并拆开 NewWatcher、Add、消费和 Close 的生命周期边界。452 收藏 -
Go malgo 结束播放时要先处理 Device,再释放 Context,最后释放 InitContext 返回的 AllocatedContext。本文按资源所有权说明 Stop、Uninit、Context.Uninit 与 Free 的边界,并给出带错误分支的清理模板。452 收藏 -
Go archive/zip 里 Writer.Close、OpenReader.Close 和条目 ReadCloser 不是同一个关闭边界。本文用写入与读取示例说明如何收口资源,并在完整读取条目后捕获 zip.ErrChecksum、io.ErrUnexpectedEOF 等错误。452 收藏 -
Go maphash.Hash.Clone 可以从已有输入的中间状态复制出独立的 hash.Cloner。本文说明如何保留共同前缀、分别追加后缀,理解 Clone 返回值、错误处理、版本要求与并发边界。452 收藏 -
用 go list -m -json 导出 Go 模块的路径、版本、目录、go.mod、替换关系和更新信息,说明连续 JSON 解析及主模块、构建列表、版本查询的边界。451 收藏 -
在 Go 中嵌入 Starlark 时,load 语句由 Thread.Load 回调负责解析模块名并返回 StringDict。本文用缓存、递归线程和循环依赖处理,搭出一个可维护的模块加载器。451 收藏