coding-go について
coding-goは、Go 1.23以降の並行処理、モジュール設計、エラー処理を中心に、AIのGoプログラミングを支援するスキルです。Goプロジェクトの実装、デバッグ、テスト、最適化に使えます。
主な機能
- 01goroutineとchannelによる並行処理
- 02インターフェースを使ったモジュール設計
- 03ジェネリクスと型制約
- 04明示的なエラー処理とラップ
- 05testingパッケージでの単体テスト
- 06GoモジュールとCLIの利用
活用シーン
- 01並行処理を使うGoサーバーの構築
- 02コードをモジュール単位に再構成
- 03Goのエラーのデバッグと処理
- 04Goテストの作成と実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill coding-goインストール後、Claude Code で/coding-goを入力して読み込まれたか確認します。
詳細
coding-go
目的
このスキルは、Go 1.23 以降の機能を活用し、高度な並行処理、モジュール化されたコード、堅牢なエラー管理に重点を置いて、AI が Go プログラミングのタスクに対応できるようにします。リアルタイムのやり取りで、Go コードの生成、デバッグ、最適化に使用します。
使用する場面
goroutine とチャネルを使ってスケーラブルなサーバーを構築するなど、並行プログラミングが必要な場合にこのスキルを使用します。インターフェースやジェネリクスを使ったモジュール型アプリケーションの開発や、Go 1.23 以降でのテスト、エラーが発生しやすいコードベースの作業にも使用します。基本的なスクリプト作成には使用せず、Go のエコシステムが必要でない場合は、ほかの言語を選択してください。
主な機能
- goroutine:並行処理のために軽量なスレッドを起動します。たとえば、
go func() { fmt.Println("Task") }()を使うと、非同期に実行できます。 - チャネル: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 とチャネルを組み合わせてください。たとえば、最初にチャネルを作成し、その後、データを送信する 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 の使用パターンには、goroutine の同期に使用するsync.WaitGroupなどの標準ライブラリ関数があります(例: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() を使ってパニックを処理します。例:go func() { defer func() { if r := recover(); r != nil { log.Error(r) } }(); riskyFunction() }()。一般的な問題の検出には go vet を使用します。プロジェクトのルートで go vet ./... を実行してください。
具体的な使用例
- 並行データ処理:リストを並行して処理するには、ゴルーチンとチャネルを使用します:
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」などの共通タグを介して coding-python および coding-java と関連しています。
- タグ経由のつながり:「go」は一般的なプログラミングスキルにつながり、「goroutine」と「channel」は coding-concurrency などの並行処理に特化したスキルに関連しています。