go-functions について
関数シグネチャの設計や関数の整理を支援する、Go 開発者向けのスキルです。ファイル内の順序、引数の明確さ、インターフェース引数、Printf 形式の命名規則を扱います。
主な機能
- 01関数のグループ化とファイル順序
- 02読みやすいシグネチャと引数コメント
- 03インターフェースの値渡し
- 04Printf 形式の命名規則
活用シーン
- 01Go ファイル内の関数整理
- 02長い、または曖昧なシグネチャの確認
- 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を参照してください。
関数のグループ化と順序
次のルールに従って、ファイル内の関数を整理します。
- 関数はおおよその呼び出し順に並べます
- 関数はレシーバーごとにグループ化します
struct/const/varの定義の後に、エクスポートされた関数を最初に配置しますNewXxx/newXxxコンストラクターは型定義の直後に配置します- 通常のユーティリティ関数はファイルの後半に配置します
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を参照してください