mcpField
C
coding-go

coding-go

github.com/alphaonedev开发46 次安装
代码仓库

关于 coding-go

coding-go 是指导 AI 处理 Go 编程任务的技能,侧重 Go 1.23+、并发、模块化设计和错误处理。它可用于 Go 项目的编码、调试、测试与优化。

主要功能

  1. 01使用 goroutine 和 channel 实现并发
  2. 02通过接口组织模块化代码
  3. 03使用泛型和类型约束
  4. 04显式处理及包装错误
  5. 05使用 testing 包编写单元测试
  6. 06Go 模块与命令行工作流

适用场景

  1. 01构建并发 Go 服务端
  2. 02将代码重构为模块化包
  3. 03调试并处理 Go 错误
  4. 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 ./...。

具体用法示例

  1. 并发数据处理:要并发处理列表,请使用 goroutine 和 channel:ch := make(chan int); go func() { for i := 0; i < 10; i++ { ch <- i*2 } }(); result := <-ch; fmt.Println(result)。
  2. 用于排序的泛型函数:实现一个泛型排序辅助函数: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 等专注于并发的技能相关。

评论

支持 Markdown