go-data-structures
Go のスライス・マップ・配列を扱う際に使用します。`new` と `make` の使い分け、`append` の活用、空スライスの宣言方法(JSON 向けの nil リテラル比較)、マップを用いた集合の実装、境界でのデータコピーなどをカバーします。コレクションの構築や操作全般に適用されますが、並行データ構造の安全性については go-concurrency を参照してください。
description の原文を見る
Use when working with Go slices, maps, or arrays — choosing between new and make, using append, declaring empty slices (nil vs literal for JSON), implementing sets with maps, and copying data at boundaries. Also use when building or manipulating collections, even if the user doesn't ask about allocation idioms. Does not cover concurrent data structure safety (see go-concurrency).
SKILL.md 本文
Go データ構造
データ構造の選択
何が必要ですか?
├─ アイテムの順序付きコレクション
│ ├─ コンパイル時にサイズが決まっている → Array [N]T
│ └─ 動的サイズ → Slice []T
│ ├─ 大体のサイズが分かっている? → make([]T, 0, capacity)
│ └─ サイズが不明か JSON に対応させたい? → var s []T (nil)
├─ キー値ルックアップ
│ └─ Map map[K]V
│ ├─ 大体のサイズが分かっている? → make(map[K]V, capacity)
│ └─ セットが必要? → map[T]struct{} (ゼロサイズ値)
└─ 関数に渡す必要がある?
└─ 呼び出し元が値を変更する可能性があれば、境界でコピーする
このスキルが適用されない場合: データ構造への同時アクセス(ミューテックス、アトミック操作)については、
go-concurrencyを参照してください。API 境界での防御的なコピーについては、go-defensiveを参照してください。パフォーマンスのための容量事前配置については、go-performanceを参照してください。
スライス
append 関数
必ず結果を代入してください — 基になる配列が変わる可能性があります:
x := []int{1, 2, 3}
x = append(x, 4, 5, 6)
// スライスをスライスに追加
x = append(x, y...) // ... に注意
2 次元スライス
独立した内側スライス(独立して成長/縮小可能):
picture := make([][]uint8, YSize)
for i := range picture {
picture[i] = make([]uint8, XSize)
}
単一割り当て(固定サイズの場合、より効率的):
picture := make([][]uint8, YSize)
pixels := make([]uint8, XSize*YSize)
for i := range picture {
picture[i], pixels = pixels[:XSize], pixels[XSize:]
}
スライスの予期しない動作をデバッグするとき、ゴルーチン間でスライスを共有するとき、またはスライスヘッダーを操作するときは、
references/SLICES.mdを参照してください。
空のスライスの宣言
空のリテラルよりも nil スライスを優先してください:
// 良い例:nil スライス
var t []string
// 避ける:nil ではないが長さ 0
t := []string{}
どちらも len と cap がゼロですが、nil スライスが推奨されるスタイルです。
JSON の例外:nil スライスは null にエンコードされ、[]string{} は [] にエンコードされます。JSON 配列が必要な場合は、nil 以外を使用してください。
インターフェースを設計するときは、nil と nil ではない長さゼロスライスを区別しないようにしてください。
マップ
セットの実装
map[T]bool を使用してください — イディオマティックで読みやすいです:
attended := map[string]bool{"Ann": true, "Joe": true}
if attended[person] { // マップにない場合は false
fmt.Println(person, "was at the meeting")
}
コピー
別のパッケージから構造体をコピーするときは注意してください。ポインタ型 (*T) にメソッドがある場合、値をコピーするとエイリアシングバグが発生する可能性があります。
一般的なルール:メソッドがポインタ型 *T に関連付けられている場合、型 T の値をコピーしないでください。これは bytes.Buffer、sync.Mutex、sync.WaitGroup、およびそれらを含む型に適用されます。
// 悪い例:ミューテックスをコピー
var mu sync.Mutex
mu2 := mu // ほとんどの場合バグ
// 良い例:ポインタで渡す
func increment(sc *SafeCounter) {
sc.mu.Lock()
sc.count++
sc.mu.Unlock()
}
クイックリファレンス
| トピック | 重要なポイント |
|---|---|
| スライス | append の結果を必ず代入し、[]T{} よりも nil スライスを優先 |
| セット | map[T]bool はイディオマティック |
| コピー | *T にメソッドがある場合 T をコピーしない;エイリアシングに注意 |
関連スキル
- 防御的なコピー:API 境界でスライスやマップをコピーして変更を防ぐには、
go-defensiveを参照してください - 容量ヒント:既知のワークロードのためにスライスやマップを事前サイズ設定するには、
go-performanceを参照してください - 反復パターン:スライス、マップ、またはチャネルを range ループで使用するには、
go-control-flowを参照してください - 宣言スタイル:
new、make、var、および複合リテラルの間で選択するには、go-declarationsを参照してください
ライセンス: 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パターンを含んでいます。