Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

go-packages

Goパッケージの作成、importの整理、依存関係の管理、またはGoコードをパッケージに分割する構成を検討する際に使用します。新しいGoプロジェクトを開始するときや、肥大化したコードベースをパッケージに分割する際にも、ユーザーが明示的にパッケージ構成を尋ねていなくても適用されます。個々の識別子の命名については対象外です(go-namingを参照)。

description の原文を見る

Use when creating Go packages, organizing imports, managing dependencies, or deciding how to structure Go code into packages. Also use when starting a new Go project or splitting a growing codebase into packages, even if the user doesn't explicitly ask about package organization. Does not cover naming individual identifiers (see go-naming).

SKILL.md 本文

Go パッケージとインポート

このスキルが適用されない場合: パッケージ内の個別の識別子の命名については、go-naming を参照してください。単一ファイル内の関数の編成については、go-functions を参照してください。インポート規則を強制するリンターの設定については、go-linting を参照してください。

パッケージの編成

Util パッケージを避ける

パッケージ名は、パッケージが提供するものを説明する必要があります。utilhelpercommon のような一般的な名前は避けてください。意味を曖昧にし、インポート競合を引き起こします。

// 良い例: 意味のあるパッケージ名
db := spannertest.NewDatabaseFromFile(...)
_, err := f.Seek(0, io.SeekStart)

// 悪い例: 曖昧な名前は意味を隠す
db := test.NewDatabaseFromFile(...)
_, err := f.Seek(0, common.SeekStart)

一般的な名前は名前の一部として使用できます (例: stringutil) が、パッケージ全体の名前になるべきではありません。

パッケージサイズ

質問アクション
目的を 1 文で説明できますか?いいえ → 責務ごとに分割
ファイルがエクスポートされていないシンボルを共有しない?これらのファイルは別のパッケージにできます
ユーザーグループが異なる部分を使用する?ユーザーの境界に沿って分割
Godoc ページが圧倒的?発見性を改善するために分割

分割しないでください: ファイルが長いだけの理由、単一型パッケージを作成するため、または循環依存を作成する場合。

パッケージを分割するか結合するか、パッケージ内でファイルを編成するか、CLI プログラムを構造化するかを決定するときは、references/PACKAGE-SIZE.md を読んでください。


インポート

インポートは空行で区切られたグループに編成されます。標準ライブラリパッケージが常に最初に来ます。goimports を使用して自動的に管理してください。

import (
    "fmt"
    "os"

    "github.com/foo/bar"
    "rsc.io/goversion/version"
)

クイックルール:

ルールガイダンス
グループ化stdlib が最初、その後外部。拡張: stdlib → その他 → proto → 副作用
名前変更衝突がない限り避けてください。最も局所的なインポートの名前を変更します。Proto パッケージは pb サフィックス付き
ブランクインポート (import _)main パッケージまたはテストのみ
ドットインポート (import .)循環依存テストファイルを除き、決して使用しないでください

拡張グループ化でインポートを編成する、proto パッケージの名前を変更する、またはブランク/ドットインポートを決定するときは、references/IMPORTS.md を読んでください。


init() を避ける

可能な限り init() を避けてください。避けられない場合、次の要件を満たす必要があります:

  1. 完全に決定的である
  2. 他の init() の順序付けから独立している
  3. 環境状態がない (環境変数、作業ディレクトリ、引数)
  4. I/O がない (ファイルシステム、ネットワーク、システムコール)

許容される使用: 単一の割り当てにできない複雑な式、プラグイン可能なフック (database/sql ダイアレクトなど)、決定的な事前計算。

init() を明示的な関数にリファクタリングする必要がある場合、または許容される init() の使用を理解する場合は、references/PACKAGE-SIZE.md を読んでください。


Main での終了

os.Exit または log.Fatal* を呼び出すのは main() でのみ です。他のすべての関数はエラーを返すべきです。

理由: 明らかでない制御フロー、テスト不可能、defer ステートメントがスキップされます。

ベストプラクティス: run() パターンを使用します — ロジックを func run() error に抽出し、単一の終了ポイントで main() から呼び出します:

func main() {
    if err := run(); err != nil {
        log.Fatal(err)
    }
}

run() パターンを実装する、CLI サブコマンドを構造化する、またはフラグ命名規則を選択するときは、references/PACKAGE-SIZE.md を読んでください。


コマンドラインフラグ

アドバイス: フラグは package main でのみ定義してください。

  • フラグ名は snake_case を使用します: --outputDir ではなく --output_dir
  • ライブラリはパラメータとして設定を受け入れるべき、直接フラグを読むべきではありません — これにより、テスト可能で再利用可能なままになります
  • 標準の flag パッケージを優先します。POSIX 規約 (ダブルダッシュ、シングルキャラクタショートカット) が必要な場合のみ pflag を使用します
// 良い例: main でのフラグ、ライブラリへのパラメータとして渡される
func main() {
    outputDir := flag.String("output_dir", ".", "directory for output files")
    flag.Parse()
    if err := mylib.Generate(*outputDir); err != nil {
        log.Fatal(err)
    }
}

関連スキル

  • パッケージの命名: パッケージ名の選択、スタッタリングの回避、またはエクスポートされたシンボルの命名については、go-naming を参照してください
  • パッケージ間のエラーハンドリング: %w vs %v でパッケージ境界でエラーをラップするときは、go-error-handling を参照してください
  • インポートリント: goimports local-prefixes を設定したり、インポートグループ化を強制したりするときは、go-linting を参照してください
  • グローバル状態: init() を明示的な初期化で置き換えたり、可変グローバルを避けたりするときは、go-defensive を参照してください

ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
cxuu
リポジトリ
cxuu/golang-skills
ライセンス
Apache-2.0
最終更新
不明

Source: https://github.com/cxuu/golang-skills / ライセンス: Apache-2.0

関連スキル

汎用その他⭐ リポ 1,982

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

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: cxuu · cxuu/golang-skills · ライセンス: Apache-2.0