go-naming
Goの識別子(パッケージ、型、関数、メソッド、変数、定数、レシーバーなど)に名前を付ける際に使用し、慣用的でわかりやすい命名を保証します。ユーザーが新しい型・パッケージ・公開APIを作成する場面でも、命名規則について明示的な質問がなくても適用されます。パッケージ構成については対象外です(go-packages を参照)。
description の原文を見る
Use when naming any Go identifier — packages, types, functions, methods, variables, constants, or receivers — to ensure idiomatic, clear names. Also use when a user is creating new types, packages, or exported APIs, even if they don't explicitly ask about naming conventions. Does not cover package organization (see go-packages).
SKILL.md 本文
Go命名規約
利用可能なスクリプト
scripts/check-naming.sh— Go コードの命名アンチパターンをスキャンします: SCREAMING_SNAKE_CASE定数、Get接頭辞のゲッター、悪いパッケージ名(util/helper/common)、"this"/"self"という名前のレシーバー。bash scripts/check-naming.sh --helpで詳細なオプションを確認できます。
基本原則
名前は以下を満たすべきです:
- 使用時に繰り返されないこと
- コンテキストを考慮すること
- 既に明確な概念を繰り返さないこと
命名は科学というより芸術です。Go の名前は他の言語よりも短い傾向があります。
命名判定フロー
何を命名していますか?
├─ パッケージ → 短い、小文字、単数形の名詞(アンダースコア、mixedCapsなし)
├─ インターフェース → メソッド名 + "-er"接尾辞(単一メソッドの場合)(Reader, Writer)
├─ レシーバー → 型の1-2文字の省略(Client の場合は c); メソッド間で一貫性を保つ
├─ 定数 → MixedCaps; iota を列挙型に使用; ALL_CAPS は禁止
├─ エクスポート関数 → MixedCaps の動詞または動詞句; ゲッターに Get 接頭辞なし
├─ 変数 → スコープの距離に比例した長さ
│ ├─ 小さいスコープ(1-7行) → 単一文字(i, n, r)
│ ├─ 中程度のスコープ → 短い単語(count, buf)
│ └─ パッケージレベル/広範囲 → 説明的(userAccountCount)
└─ 任意の名前 → 確認: パッケージ名またはコンテキストを繰り返していないか? はい の場合、短縮する
MixedCaps(必須)
Normative: すべての Go 識別子は MixedCaps を使用する必要があります。
アンダースコアが許可される範囲: テスト関数(TestFoo_InvalidInput)、生成されたコード、OS/cgo相互運用のみです。
パッケージ名
Normative: パッケージは小文字で、アンダースコアなしである必要があります。
短く、小文字、単数形の名詞です。util、common、helperといった一般的な名前は避けてください。特定の名前を選びましょう: stringutil、httpauth、configloader。
// 良い: user, oauth2, tabwriter
// 悪い: user_service, UserService, count (変数をシャドウイング)
パッケージの命名、インポートエイリアスの決定、または一般的な名前と特定の名前の選択時は
references/IDENTIFIERS.mdを参照してください。
インターフェース名
Advisory: 単一メソッドインターフェースは"-er"接尾辞を使用します。
単一メソッドインターフェースはメソッド名に-erを付けます: Reader、Writer、Formatter。標準的なメソッド名(Read、Write、Close、String)とそのシグネチャを遵守してください。
新しいインターフェースを定義するか、既知のメソッドシグネチャを実装する場合は
references/IDENTIFIERS.mdを参照してください。
レシーバー名
Normative: レシーバーは短い省略形であり、一貫して使用する必要があります。
型を省略した1-2文字で、すべてのメソッドで一貫性を保ちます: func (c *Client) Connect()、func (c *Client) Send()。
thisやselfを使用しないでください。
レシーバー名を選択するか、メソッド間で一貫性を確保する場合は
references/IDENTIFIERS.mdを参照してください。
定数名
Normative: 定数は MixedCaps を使用し、ALL_CAPS または K 接頭辞は使用しません。
定数を値ではなく役割で命名します: ThreeではなくMaxRetries、Port8080ではなくDefaultPort。
const MaxPacketSize = 512
const defaultTimeout = 30 * time.Second
定数を命名するか、役割ベースと値ベースの名前の選択時は
references/IDENTIFIERS.mdを参照してください。
イニシャリズムと頭字語
Normative: イニシャリズムは大文字と小文字を一貫して保ちます。
イニシャリズム(URL、ID、HTTP、API)は大文字または小文字で統一します: HTTPClient、userID、ParseURL() — HttpClient、orderId、ParseUrl()ではなく。
複合名でイニシャリズムを使用する場合または完全な大文字小文字テーブルについては
references/IDENTIFIERS.mdを参照してください。
関数とメソッド名
Advisory: 単純なアクセサーに
Get接頭辞を使用しません; アクションには動詞のような名前を使用します。
フィールドownerのゲッターはGetOwner()ではなくOwner()です。セッターはSetOwner()です。高コストな操作にはComputeまたはFetchを使用してください。
関数が型によってのみ異なる場合、型を末尾に含めます: ParseInt()、ParseInt64()。
ゲッター/セッター API を設計するか、関数バリアントを命名する場合は
references/IDENTIFIERS.mdを参照してください。
変数名
変数命名は簡潔さと明確さのバランスを取ります。主要な原則:
- スコープベースの長さ: 小さいスコープには短い名前(
i、v); 大きいスコープには長い説明的な名前 - 単一文字の規約: 見慣れたパターンを使用(
iはインデックス、r/wはリーダー/ライター) - 名前に型を含めない:
userSliceではなくusers、nameStringではなくnameを使用 - エクスポートされていないグローバルに接頭辞を付ける: パッケージレベルのエクスポートされていない変数/定数に
_接頭辞を使用してシャドウイングを防止
for i, v := range items { ... } // 小さいスコープ
pendingOrders := filterPending(orders) // 大きいスコープ
const _defaultPort = 8080 // エクスポートされていないグローバル
15行を超える関数内のローカル変数を命名する場合は
references/VARIABLES.mdを参照してください。
繰り返しを回避する
Go の名前は使用時に繰り返されるような感じを与えるべきではありません。完全なコンテキストを考慮してください:
- パッケージ + シンボル:
widget.NewWidget()ではなくwidget.New() - レシーバー + メソッド:
p.ProjectName()ではなくp.Name() - コンテキスト + 型:
sqldbパッケージではDBConnectionではなくConnectionを使用
パッケージ名とそのエクスポートされたシンボルが冗長に感じられる場合は
references/REPETITION.mdを参照してください。
組み込み名を回避する
Go の事前宣言識別子(error、string、len、cap、append、copy、new、make等)を変数、パラメータ、または型名としてシャドウイングしないでください。
詳細ガイダンス: go-declarations — "Avoid Using Built-In Names"セクションを参照してください。
クイックリファレンス
| 要素 | ルール | 例 |
|---|---|---|
| パッケージ | 小文字、アンダースコアなし | package httputil |
| エクスポート | MixedCaps、大文字で始まる | func ParseURL() |
| エクスポート非 | mixedCaps、小文字で始まる | func parseURL() |
| レシーバー | 1-2文字の省略 | func (c *Client) |
| 定数 | MixedCaps、ALL_CAPS は禁止 | const MaxSize = 100 |
| イニシャリズム | 一貫した大文字小文字 | userID、XMLAPI |
| 変数 | 長さ ~ スコープサイズ | i(小)、userCount(大) |
| 組み込み名 | 事前宣言識別子をシャドウイングしない | go-declarationsを参照 |
検証: 識別子の名前変更後、
bash scripts/check-naming.shを実行して命名アンチパターンが残っていないことを確認します。次にgo build ./...を実行して、名前変更が何も壊していないことを確認します。
関連スキル
- インターフェース命名:
-er接尾辞でインターフェースを命名するか、レシーバー型を選択する場合はgo-interfacesを参照してください - パッケージ命名: パッケージを命名する、
util/commonを回避する、またはインポート衝突を解決する場合はgo-packagesを参照してください - エラー命名: センチネルエラー(
ErrFoo)またはカスタムエラー型を命名する場合はgo-error-handlingを参照してください - 宣言スコープ: 変数名の長さがスコープに依存する場合、または組み込みのシャドウイングを回避する場合は
go-declarationsを参照してください - スタイル原則: 識別子名で明確さと簡潔さのバランスを取る場合は
go-style-coreを参照してください
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- cxuu
- リポジトリ
- cxuu/golang-skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/cxuu/golang-skills / ライセンス: Apache-2.0
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。