go-context
Goの`context.Context`を扱う際に使用します。関数シグネチャへの配置、キャンセルやデッドラインの伝播、コンテキストへの値の保存とパラメータ渡しの使い分けなどを扱います。長時間実行処理のキャンセル、タイムアウト設定、リクエストスコープのデータ受け渡しにも対応しますが、goroutineのライフサイクルや同期プリミティブは対象外です(`go-concurrency`を参照)。
description の原文を見る
Use when working with context.Context in Go — placement in signatures, propagating cancellation and deadlines, and storing values in context vs parameters. Also use when cancelling long-running operations, setting timeouts, or passing request-scoped data, even if they don't mention context.Context directly. Does not cover goroutine lifecycle or sync primitives (see go-concurrency).
SKILL.md 本文
Go Context の使用法
Context を最初のパラメータとする
Context を使う関数では、これを最初のパラメータとして受け取るべきです:
func F(ctx context.Context, /* other arguments */) error
func ProcessRequest(ctx context.Context, req *Request) (*Response, error)
これは Go の強力な慣例で、context のフローを目に見える形で一貫性を持たせて コードベース全体に広げるものです。
Context を構造体に格納しない
Context メンバーを構造体型に追加しないでください。代わりに、それが必要な
各メソッドに ctx をパラメータとして渡してください:
// 悪い例: Context を構造体に格納
type Worker struct {
ctx context.Context // これはしないでください
}
// 良い例: Context をメソッドに渡す
type Worker struct{ /* ... */ }
func (w *Worker) Process(ctx context.Context) error {
// Context が明示的に渡される — ライフタイムが明確
}
例外: 標準ライブラリまたはサードパーティ製ライブラリのインターフェースの シグネチャに合致させる必要があるメソッドは、これを回避する必要があるかもしれません。
カスタム Context 型を作成しない
カスタム Context 型を作成したり、関数シグネチャで context.Context 以外の
インターフェースを使用したりしないでください:
// 悪い例: カスタム context 型
type MyContext interface {
context.Context
GetUserID() string
}
// 良い例: 標準的な context.Context を使用して値を抽出
func Process(ctx context.Context) error {
userID := GetUserID(ctx)
}
アプリケーションデータをどこに置くか
優先順位の高い順に、以下の選択肢を検討してください:
- 関数のパラメータ — 最も明示的で型安全
- レシーバ — その型に属するデータ向け
- グローバル変数 — 本当にグローバルな設定向け (控えめに使用)
- Context 値 — リクエストスコープのデータのみ
Context 値が適切な場合:
- リクエスト ID とトレース ID
- リクエストとともに流れる認証・認可情報
- デッドラインとキャンセルシグナル
Context 値が不適切な場合:
- オプショナルな関数パラメータ
- 明示的に渡せるデータ
- リクエストごとに変わらない設定
よくあるパターン
Context を導出するとき (WithTimeout, WithCancel, WithDeadline)、ループや HTTP ハンドラーでキャンセルをチェックするとき、型付きキーで context 値を使用するとき、またはクイックリファレンステーブルが必要なときは
references/PATTERNS.mdを読んでください。
Context を導出する
導出された context を作成した直後に、必ず defer cancel() を使用してください:
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
キャンセルをチェックする
select {
case <-ctx.Done():
return ctx.Err()
default:
// 処理を実行
}
Context の不変性
Context は不変です — 同じデッドラインとキャンセルシグナルを共有する複数の
同時実行呼び出しに対して、同じ ctx を渡すことは安全です。
関連スキル
- Goroutine の調整: context を goroutine キャンセル、select ベースのタイムアウト、または errgroup に使用するときは
go-concurrencyを参照 - エラーハンドリング:
ctx.Err()キャンセルエラーをラップまたは返すかどうかを決定するときはgo-error-handlingを参照 - インターフェース設計: context とともにインターフェースを受け取る API を設計するときは
go-interfacesを参照 - リクエストスコープのログ: ロガーを context に注入したり、構造化ログ出力にリクエスト ID を追加したりするときは
go-loggingを参照
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- cxuu
- リポジトリ
- cxuu/golang-skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/cxuu/golang-skills / ライセンス: Apache-2.0
関連スキル
hugging-face-trackio
Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。
btc-bottom-model
ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。
protein_solubility_optimization
タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。
research-lookup
Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。
tree-formatting
ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。
querying-indonesian-gov-data
インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。