mcpField
G
go-functions

go-functions

github.com/cxuu開発1861.0k 回インストール19 週間前に更新
リポジトリ

go-functions について

関数シグネチャの設計や関数の整理を支援する、Go 開発者向けのスキルです。ファイル内の順序、引数の明確さ、インターフェース引数、Printf 形式の命名規則を扱います。

主な機能

  1. 01関数のグループ化とファイル順序
  2. 02読みやすいシグネチャと引数コメント
  3. 03インターフェースの値渡し
  4. 04Printf 形式の命名規則

活用シーン

  1. 01Go ファイル内の関数整理
  2. 02長い、または曖昧なシグネチャの確認
  3. 03go vet に対応する書式関数の定義

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cxuu/golang-skills --skill go-functions

インストール後、Claude Code で/go-functionsを入力して読み込まれたか確認します。

同梱ファイルreferences/PRINTF-STRINGER.mdreferences/SIGNATURES.md

詳細

Go 関数の設計

リソースのルーティング

  • references/SIGNATURES.md - パラメーター、戻り値、名前付き戻り値、またはシグネチャの読みやすさを設計する際に参照してください。
  • references/PRINTF-STRINGER.md - fmt の動詞、Stringer、GoStringer、Formatter、または Printf 形式の関数名を使用する際に参照してください。

このスキルが適用されない場合:関数オプションのコンストラクター(WithTimeout、WithLogger)については、go-functional-optionsを参照してください。エラーの戻り値に関する規約については、go-error-handlingを参照してください。関数やメソッドの命名については、go-namingを参照してください。


関数のグループ化と順序

次のルールに従って、ファイル内の関数を整理します。

  1. 関数はおおよその呼び出し順に並べます
  2. 関数はレシーバーごとにグループ化します
  3. struct/const/var の定義の後に、エクスポートされた関数を最初に配置します
  4. NewXxx/newXxx コンストラクターは型定義の直後に配置します
  5. 通常のユーティリティ関数はファイルの後半に配置します
type something struct{ ... }

func newSomething() *something { return &something{} }

func (s *something) Cost() int { return calcCost(s.weights) }

func (s *something) Stop() { ... }

func calcCost(n []int) int { ... }

関数シグネチャ

可能な限り、シグネチャは1行に収めます。折り返す必要がある場合は、すべての引数をそれぞれ別の行に配置し、末尾にカンマを付けます。

func (r *SomeType) SomeLongFunctionName(
    foo1, foo2, foo3 string,
    foo4, foo5, foo6 int,
) {
    foo7 := bar(foo1)
}

曖昧な引数には /* name */ コメントを追加します。さらに望ましいのは、名前のない bool パラメーターをカスタム型に置き換えることです。


インターフェースへのポインター

インターフェースへのポインターが必要になることは、ほとんどありません。インターフェースは値として渡してください。基になるデータがポインターであっても問題ありません。

// Bad: pointer to interface
func process(r *io.Reader) { ... }

// Good: pass the interface value
func process(r io.Reader) { ... }

Printf と Stringer

Printf 形式の関数名

フォーマット文字列を受け取る関数の名前は、go vet のサポートを得るために f で終わるようにします。Printf 呼び出し以外で使うフォーマット文字列は const として宣言してください。

ログやエラーメッセージ用に文字列をフォーマットする場合は、手動で引用符を付ける %s より %q を優先してください。特殊文字を安全にエスケープし、引用符で囲んでくれます。

return fmt.Errorf("unknown key %q", key) // produces: unknown key "foo\nbar"

省略可能なパラメーターが3つ以上あるコンストラクターを設計する場合は、go-functional-optionsを参照してください。


クイックリファレンス

トピックルール
ファイル内の順序型 -> コンストラクター -> エクスポートされた関数 -> エクスポートされていない関数 -> ユーティリティ
シグネチャの折り返しすべての引数をそれぞれ別の行に配置し、末尾にカンマを付ける
名前のないパラメーター/* name */ コメントを追加するか、カスタム型を使う
インターフェースへのポインターほとんど必要ありません。インターフェースは値として渡す
Printf 関数名go vet のサポートを得るために f で終える

関連スキル

  • エラーの戻り値:エラーの戻り値のパターンを設計する場合や、複数の戻り値を持つ関数でエラーをラップする場合は、go-error-handlingを参照してください
  • 命名規則:関数やメソッドの命名、またはゲッター/セッターのパターンを選ぶ場合は、go-namingを参照してください
  • 関数オプション:省略可能なパラメーターが3つ以上あるコンストラクターを設計する場合は、go-functional-optionsを参照してください
  • フォーマットの原則:行の長さ、名前のない戻り値、またはシグネチャのフォーマットを決める場合は、go-style-coreを参照してください

コメント