Go教程技术文章
-
用 Go atomic.Bool 管理进程运行状态,展示并发读取、幂等启动、一次停止和适用边界,给出可复用的最小状态封装示例。310 收藏 -
Go testing.T.Cleanup 会在测试及其子测试完成后执行已注册回调,并按后注册先执行的顺序收尾。本文用资源依赖和子测试作用域说明怎样安排注册顺序,避免测试夹具提前失效。309 收藏 -
用 Go 的 os.ReadFile 读取配置文件时,不要比较错误字符串。本文用 errors.Is 和 errors.As 区分权限不足、路径不存在与其他失败,并通过 %w 保留可追踪的错误链。309 收藏 -
Go modules 的 vendor 模式能把构建所需依赖放进项目目录,但可复现的关键不是简单提交 vendor,而是让 go.mod、vendor/modules.txt 与构建模式保持一致。本文梳理 go mod vendor、-mod=vendor 和团队协作中的固定检查点。309 收藏 -
Go 使用 slices.SortStableFunc 并让相同排序键返回 0,可以保留本次输入中等价记录的相对次序。本文区分批内稳定性与跨请求确定性,说明切片复制、分片收集和次级键的取舍。309 收藏 -
Go 的 build.Context.MatchFile 会结合文件名和文件内容中的构建约束,判断源文件是否属于目标构建上下文。本文用 GOOS、GOARCH、CgoEnabled 和 BuildTags 说明筛选逻辑、错误处理与源码扫描写法。309 收藏 -
Go JMESPath 查询在请求路径中反复解析时,容易把表达式编译和数据搜索混在一起。本文从一次重复解析的故障症状出发,说明如何用 Compile 提前编译稳定查询,在多个 JSON 文档上复用,并处理并发安全、错误传播和动态表达式边界。309 收藏 -
go-message 的 mail.Header.Subject 会按邮件头的 MIME 编码规则解码主题。本文用一个可复用的读取骨架说明如何处理字符集注册、未知字符集错误、原始头保留和多段主题边界。309 收藏 -
Go net/http 的 CrossOriginProtection 被拒绝时,可以先用 SetDenyHandler 设置统一的 403 响应,再交给 Handler 包装业务处理器。本文对比 Handler 与 Check 的职责,给出 JSON 拒绝响应和手动处理 error 的写法。309 收藏 -
Go sync.Map.LoadOrStore 返回的 actual 是最终值,loaded 则说明这个值来自已有条目还是本次存入。本文结合空键、已存在键和并发竞争,说明如何用 loaded 判断初始化责任,避免把候选值误当成缓存结果。308 收藏 -
Go 的 uint64 乘法会静默保留低 64 位。本文用 math/bits.Mul64 拆出 128 位乘积,通过 hi != 0 判断溢出,并封装可复用的安全乘法函数。308 收藏 -
Go tar.Reader.Next 负责切换 tar 归档条目并返回 Header,当前 Reader 随后提供该条目的数据。本文说明 Next、Read、io.EOF 的边界,以及路径、类型和大小控制,帮助你安全遍历归档文件。308 收藏 -
Go 终端表格不能按字节长度补空格。本文用 go-runewidth.StringWidth 计算显示单元格,再用 FillRight 和 FillLeft 对齐中英文混合字段,并说明截断、emoji 与 EastAsianWidth 的边界。308 收藏 -
用 strings.Cut 解析裸键、空值和普通配置值,减少临时拆分切片,附 ParseOption 批处理实现与 SplitN 对照基准代码,说明统计单位、错误语义和结果存储寿命。308 收藏 -
用 Go 的 io.LimitedReader 控制流式读取上限,说明 N、n、EOF 与底层输入的关系,并给出读取固定片段和继续处理剩余数据的实用写法。307 收藏