go-style-core
Goのフォーマット、行の長さ、ネスト、naked return、セミコロン、およびコアスタイル原則に関する作業時に使用します。より具体的なスキルでカバーされていないスタイルの質問にも対応するフォールバックとして機能しますが、エラーハンドリング・命名・テストなどのドメイン固有のパターンは対象外です(専用スキルを参照)。
description の原文を見る
Use when working with Go formatting, line length, nesting, naked returns, semicolons, or core style principles. Also use when a style question isn't covered by a more specific skill, even if the user doesn't reference a specific style rule. Does not cover domain-specific patterns like error handling, naming, or testing (see specialized skills). Acts as fallback when no more specific style skill applies.
SKILL.md 本文
Go スタイルコア原則
スタイル原則(優先度順)
読みやすい Go コードを書く際は、以下の原則を優先度順に適用します:
優先度順
- 明確性(Clarity) — 読み手が余計な背景知識なしにコードを理解できるか?
- シンプルさ(Simplicity) — これが目標を達成するもっともシンプルな方法か?
- 簡潔性(Concision) — すべての行が存在価値を持っているか?
- 保守性(Maintainability) — 後で変更しやすいか?
- 一貫性(Consistency) — 周囲のコードやプロジェクト規約に合致しているか?
明確性、シンプルさ、簡潔性の間の葛藤を解決する際、またはそれぞれの原則が実際の Go コードでどのように適用されるかを知りたい際は、
references/PRINCIPLES.mdを参照してください。
フォーマット
gofmt を実行してください — 例外なしです。厳密な行の長さ制限はありません が、Uber は 99 文字のソフトリミットを推奨しています。長さではなく意味で改行を判断し、単に折り返すのではなくリファクタリングしてください。
gofmt の設定、行区切りの判断、MixedCaps ルールの適用、またはローカルな一貫性の問題を解決する際は、
references/FORMATTING.mdを参照してください。
ネストを減らす
エラーケースと特殊な条件を最初に処理します。早期に return するか loop を continue させることで、「正常系(happy path)」を字下げしないままにします。
// 悪い例:深くネストしている
for _, v := range data {
if v.F1 == 1 {
v = process(v)
if err := v.Call(); err == nil {
v.Send()
} else {
return err
}
} else {
log.Printf("Invalid v: %v", v)
}
}
// 良い例:早期 return でフラットな構造
for _, v := range data {
if v.F1 != 1 {
log.Printf("Invalid v: %v", v)
continue
}
v = process(v)
if err := v.Call(); err != nil {
return err
}
v.Send()
}
不要な Else
if の両方の分岐で変数が設定される場合は、デフォルト値+上書きパターンを使用します。
// 悪い例:両方の分岐で設定
var a int
if b {
a = 100
} else {
a = 10
}
// 良い例:デフォルト値 + 上書き
a := 10
if b {
a = 100
}
Naked Returns
引数を指定しない return ステートメントは、名前付き戻り値を返します。これは「naked return」として知られています。
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return // x, y を返す
}
Naked Returns のガイドライン
- 小さな関数では OK:Naked return は数行程度の関数では問題ありません
- 中程度以上の関数では明示的に:関数が中程度のサイズに成長したら、明確性のため戻り値を明示的に書きます
- Naked return のためだけに結果を名前付けしない:ドキュメント化の明確性は、1〜2 行を節約することより常に重要です
// 良い例:小さな関数、naked return は明確
func minMax(a, b int) (min, max int) {
if a < b {
min, max = a, b
} else {
min, max = b, a
}
return
}
// 良い例:大きな関数、明示的な return
func processData(data []byte) (result []byte, err error) {
result = make([]byte, 0, len(data))
for _, b := range data {
if b == 0 {
return nil, errors.New("null byte in data")
}
result = append(result, transform(b))
}
return result, nil // 明示的:長い関数ではより明確
}
名前付き戻り値パラメータのガイダンスは go-documentation を参照してください。
セミコロン
Go の字句解析器は、最後のトークンが識別子、リテラル、または break continue fallthrough return ++ -- ) } のいずれかである行の後に自動的にセミコロンを挿入します。
これは、開き括弧は制御構造と同じ行になければならない ことを意味します:
// 良い例:括弧が同じ行
if i < f() {
g()
}
// 悪い例:括弧が次の行 — 字句解析器が f() の後にセミコロンを挿入
if i < f() // 間違い!
{ // 間違い!
g()
}
慣用的な Go では、セミコロンは for loop の句内と、1 行に複数のステートメントを並べるときだけ明示的に使用されます。
クイックリファレンス
| 原則 | キーとなる質問 |
|---|---|
| 明確性 | 読み手が何と なぜを理解できるか? |
| シンプルさ | これが最もシンプルなアプローチか? |
| 簡潔性 | シグナルノイズ比は高いか? |
| 保守性 | これを後で安全に変更できるか? |
| 一貫性 | これは周囲のコードと合致しているか? |
関連スキル
- 命名規則:MixedCaps の適用、識別子名の選択、命名に関する議論を解決する際は
go-namingを参照してください - エラー処理フロー:エラーファーストガード句の構造化や early return によるネスト削減は
go-error-handlingを参照してください - ドキュメント:doc コメント、名前付き戻り値パラメータ、パッケージレベルドキュメントを書く際は
go-documentationを参照してください - Linting 自動化:golangci-lint によるスタイルチェックの自動化や CI 設定は
go-lintingを参照してください - コードレビュー:体系的なコードレビュー中にスタイル原則を適用する際は
go-code-reviewを参照してください - ロギングスタイル:ロギング慣行の確認、log と slog の選択、ログ出力の構造化は
go-loggingを参照してください
ライセンス: 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を通じてオンチェーン取引とデータ照会を実現します。