关于 coding-go
coding-go 是指导 AI 处理 Go 编程任务的技能,侧重 Go 1.23+、并发、模块化设计和错误处理。它可用于 Go 项目的编码、调试、测试与优化。
主要功能
- 01使用 goroutine 和 channel 实现并发
- 02通过接口组织模块化代码
- 03使用泛型和类型约束
- 04显式处理及包装错误
- 05使用 testing 包编写单元测试
- 06Go 模块与命令行工作流
适用场景
- 01构建并发 Go 服务端
- 02将代码重构为模块化包
- 03调试并处理 Go 错误
- 04编写并运行 Go 测试
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill coding-go安装后在 Claude Code 中输入/coding-go确认已加载。
详细介绍
coding-go
用途
此技能让 AI 能够使用 Go 1.23+ 的特性处理 Go 编程任务,重点关注高级并发、模块化代码和可靠的错误管理。可在实时交互中用它生成、调试和优化 Go 代码。
适用场景
需要并发编程时使用此技能,例如使用 goroutine 和 channel 构建可扩展的服务器。开发包含接口和泛型的模块化应用,或测试 Go 1.23+ 中容易出错的代码库时,也可使用此技能。对于基础脚本任务,请避免使用;如果不需要 Go 生态系统,请选择其他语言。
核心能力
- Goroutine:启动轻量级线程以实现并发;例如,使用
go func() { fmt.Println("Task") }()异步运行。 - Channel:支持 goroutine 之间的安全通信;使用
ch := make(chan int)声明,并通过ch <- 5或<-ch发送或接收。 - 接口:定义多态契约;例如,
type Writer interface { Write([]byte) error }。 - 错误处理:显式检查错误,例如
if err != nil { return err },并支持通过errors.Is()处理包装错误。 - 模块:使用
go mod管理依赖;通过go mod init example.com/project初始化。 - 测试:使用
testing包编写单元测试;例如,func TestAdd(t *testing.T) { if add(1,2) != 3 { t.Error("Failed") } }。 - 泛型:在函数中使用类型参数;例如,
func Map[T any](slice []T, f func(T) T) []T { ... }。
使用模式
实现并发时,务必将 goroutine 与 channel 配合使用,以避免竞态条件;例如,先创建 channel,再启动向其发送数据的 goroutine。编写模块化代码时,使用接口组织包,以解耦依赖——通过 go get 导入模块,并使用 import "example.com/pkg"。处理错误时,使用 fmt.Errorf("wrap: %w", err) 添加上下文信息,并沿调用栈向上传递。使用泛型时,定义 [T comparable] 等类型约束,以确保函数的类型安全。在 _test.go 文件中编写测试后,在包目录中运行 go test -v 来测试代码。
常用命令/API
使用 Go CLI 构建和运行代码:
go run main.go:编译并执行文件;添加-race标志以检测竞态条件,例如go run -race main.go。go build -o output.bin:编译为可执行文件;添加-trimpath以提高安全性,例如go build -trimpath -o app。go mod tidy:清理 go.mod 中的依赖;添加导入后运行。go test -cover:运行测试并统计覆盖率;例如,go test -coverprofile=coverage.out ./pkg。 API 模式包括使用sync.WaitGroup等标准库函数来同步 goroutine(例如,var wg sync.WaitGroup; wg.Add(1); go func() { defer wg.Done(); ... }(); wg.Wait())。对于外部工具,设置$GO111MODULE=on等环境变量以启用模块。
集成说明
集成此技能时,请确保 AI 可访问 Go 1.23+ 环境;在 macOS 上通过 brew install go 安装,或从 golang.org 下载。对于使用 Go 模块的 GitHub 集成等需要身份验证的工具,请在 go get 命令中使用 $GITHUB_TOKEN 等环境变量。使用 go.mod 文件配置 AI 的工作区:通过 go mod init myproject 创建文件,然后在提示词中引用它。如果使用 IDE 扩展,请指定 $GOPATH/src 等路径,并确保 AI 在命令前添加正确的工作目录,例如 cd /path/to/project && go run main.go。
错误处理
对于文件 I/O 或 API 调用等可能失败的操作,务必检查错误;使用 if err := os.Open("file.txt"); err != nil { log.Fatal(err) }。对于包装错误,使用 errors.Unwrap() 检查错误链。在并发代码中,在 goroutine 内使用 recover() 处理 panic,例如:go func() { defer func() { if r := recover(); r != nil { log.Error(r) } }(); riskyFunction() }()。使用 go vet 检查常见问题:在项目根目录运行 go vet ./...。
具体用法示例
- 并发数据处理:要并发处理列表,请使用 goroutine 和 channel:
ch := make(chan int); go func() { for i := 0; i < 10; i++ { ch <- i*2 } }(); result := <-ch; fmt.Println(result)。 - 用于排序的泛型函数:实现一个泛型排序辅助函数:
func Sort[T []int](slice T) { sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] }) } main() { nums := []int{3,1,2}; Sort(nums); fmt.Println(nums) }。
图关系
- 相关内容:编程(集群),具体来说,通过「coding」等共享标签与 coding-python 和 coding-java 相关。
- 通过标签关联:「go」关联通用编程技能;「goroutine」和「channel」与 coding-concurrency 等专注于并发的技能相关。