用途
go-ops 是一个 Go 语言开发技能模块,用于在编写 Go 代码时提供惯用模式、并发、错误处理、测试和项目结构方面的参考与指导。它适合需要快速查阅 Go 生产实践、决策并发与错误处理方案、或搭建规范项目结构的开发者。
主要能力
模块与工作区
提供 go mod init、go get、go mod tidy、go mod vendor 以及多模块工作区 go work init / go work use 的快速上手命令。
错误处理
以决策树形式区分不同错误场景:已知可预期条件使用哨兵错误(如 var ErrNotFound = errors.New("not found"),调用方用 errors.Is 检查);需要携带结构化数据时使用自定义错误类型并实现 Error(),调用方用 errors.As 检查;为已有错误添加上下文时使用 fmt.Errorf("load config: %w", err) 包装;真正不可恢复时使用 panic;并发产生的多个错误可用 errors.Join 或 multierr 包。还给出错误包装约定:在每一层添加上下文,不重复函数名。
并发
以决策树形式覆盖多种并发模式:运行 N 个独立任务并收集结果用 errgroup.Group(首个错误即取消);后台即发即忘任务用 go func() 并配合 context 取消,且必须处理或记录错误;生产者/消费者管道用 channel(可为吞吐量设置缓冲,生产者完成后关闭);限流并发用信号量 make(chan struct{}, maxConcurrency);共享可变状态用 sync.Mutex 或 sync.RWMutex;一次性初始化用 sync.Once;仅等待 N 个 goroutine 结束而不收集错误用 sync.WaitGroup。并给出 errgroup 快速上手示例,包括 SetLimit 限制并发数。
接口设计
遵循“接受接口、返回结构体”原则,并列出常用标准库接口及其用途,如 io.Reader、io.Writer、io.Closer、fmt.Stringer、error、sort.Interface、http.Handler、encoding.BinaryMarshaler。还介绍函数式选项模式(Option func(*Server)),用于带默认值的可配置构造。
测试
提供表驱动测试示例,以及 go test 常用命令:运行全部测试、覆盖率(-cover -coverprofile 与 go tool cover -html)、运行指定测试(-run)、基准测试(-bench -benchmem)、竞态检测(-race)、模糊测试(-fuzz)。
常见陷阱
以表格列出常见问题及修复方式,包括:nil 切片与空切片在 JSON 序列化时的差异;goroutine 因通道无读写方而泄漏;循环中 defer 不会在每次迭代执行;接口 nil 陷阱(类型化 nil 指针赋给 error 接口不等于 nil);range 变量捕获(Go 1.22 之前);循环中字符串拼接导致 O(n^2) 分配;sync.WaitGroup 在 go 之后调用 Add 引发竞态;无缓冲通道死锁;map 并发使用不安全。
项目结构
给出推荐目录布局:cmd 存放入口点、internal 存放私有包、pkg 存放可选公开包,以及 go.mod、go.sum、Makefile 或 justfile、.golangci.yml。
性能
提供 CPU 与内存分析、trace、逃逸分析的命令,以及优化模式:已知大小时预分配切片、字符串拼接用 strings.Builder、频繁分配释放用 sync.Pool、内存敏感时按大小排列结构体字段、I/O 密集时复用缓冲。
使用方式
该技能以文档与参考文件形式组织。主文档提供快速参考与决策树,深入主题需加载对应参考文件,包括 concurrency.md、error-handling.md、testing.md、interfaces-generics.md、project-structure.md、performance.md、expert-insights.md。每个参考文件自包含。
适用场景
适用于 Go 项目的日常开发、代码审查、并发方案选型、错误处理规范制定、测试编写、项目结构搭建与性能调优。
限制
资料未提供该技能的安装方式、收费模式、平台支持范围或具体效果数据,这些信息暂未提供。