Agent Skills by ALSEL
Anthropic Claudeデータ・分析⭐ リポ 0品質スコア 50/100

golang-samber-lo

samber/lo を使用した Go 向けのファンクショナルプログラミングヘルパースキルです。スライス・マップ・チャネル・文字列・数値演算・タプル・並行処理向けの型安全なジェネリック関数(Map、Filter、Reduce、GroupBy、Chunk、Flatten、Find、Uniq 等)を500種類以上提供し、イミュータブルなコアパッケージ(lo)、並行処理バリアント(lop)、インプレース変更(lom)、遅延イテレータ(loi)、実験的な SIMD(lo/exp/simd)もカバーします。コードベースが `github.com/samber/lo` をインポートしている場合や、Go でファンクショナルスタイルのデータ変換を実装する際に適用してください。

description の原文を見る

Functional programming helpers for Golang using samber/lo — 500+ type-safe generic functions for slices, maps, channels, strings, math, tuples, and concurrency (Map, Filter, Reduce, GroupBy, Chunk, Flatten, Find, Uniq, etc.). Core immutable package (lo), concurrent variants (lo/parallel aka lop), in-place mutations (lo/mutable aka lom), lazy iterators (lo/it aka loi for Go 1.23+), and experimental SIMD (lo/exp/simd). Apply when using or adopting samber/lo, when the codebase imports github.com/samber/lo, or when implementing functional-style data transformations in Go. Not for streaming pipelines (→ See golang-samber-ro skill).

SKILL.md 本文

ペルソナ: あなたは、手動ループよりも宣言的なコレクション変換を好む Go エンジニアです。ボイラープレートを削減するために lo を活用しますが、stdlib で十分な場合と、loplom、または loi へアップグレードする必要がある場合を理解しています。

samber/lo — Go のための関数型ユーティリティ

Lodash にインスパイアされた、ジェネリクス優先のユーティリティライブラリで、スライス、マップ、文字列、数学、チャネル、タプル、および並行処理用の 500 以上の型安全なヘルパーを提供します。外部依存はゼロ。デフォルトではイミュータブル。

公式リソース:

このスキルは網羅的ではありません。詳細については、ライブラリのドキュメントとコード例を参照してください。Context7 は発見可能性プラットフォームとしてお役に立ちます。

samber/lo を使う理由

Go の stdlib slicesmaps パッケージは、基本的なヘルパー (sort、contains、keys) をカバーしているのみ (~10 個)。他のすべて — Map、Filter、Reduce、GroupBy、Chunk、Flatten、Zip — は手動の for ループを必要とします。lo はこのギャップを埋めます:

  • 型安全なジェネリクスinterface{} キャストなし、リフレクションなし、コンパイル時チェック、インターフェイスボックス化オーバーヘッドなし
  • デフォルトではイミュータブル — 新しいコレクションを返す、並行読み取りに対して安全、推論しやすい
  • 合成可能 — 関数がスライス/マップを取り返すため、ラッパー型なしでチェーンできる
  • ゼロ依存 — stdlib のみ、推移的な依存リスクなし
  • 段階的な複雑さlo から始めて、プロファイリングが要求する場合のみ lop/lom/loi にアップグレード
  • エラーバリアント — ほとんどの関数に Err 接尾辞 (MapErrFilterErrReduceErr) があり、最初のエラーで停止

インストール

go get github.com/samber/lo
パッケージインポートエイリアスGo バージョン
Core (immutable)github.com/samber/lolo1.18+
Parallelgithub.com/samber/lo/parallellop1.18+
Mutablegithub.com/samber/lo/mutablelom1.18+
Iteratorgithub.com/samber/lo/itloi1.23+
SIMD (experimental)github.com/samber/lo/exp/simd1.25+ (amd64 only)

適切なパッケージを選ぶ

lo から始めます。プロファイリングがボトルネックを示すか、遅延評価が明示的に必要な場合のみ、他のパッケージに移動します。

パッケージ使用時トレードオフ
loすべての変換のデフォルト新しいコレクションを割り当てる (安全、予測可能)
lop大規模データセット (1000+ 項目) の CPU バウンド作業ゴルーチンオーバーヘッド; I/O や小規模スライスには向かない
lompprof -alloc_objects で確認されたホットパス入力を変異させる — 呼び出し者は副作用を理解する必要がある
loi大規模データセットとチェーンされた変換 (Go 1.23+)遅延評価はメモリを節約するがイテレータの複雑さを追加
simdベンチマーク後の数値一括操作 (実験的)不安定な API、バージョン間で破壊される可能性あり

重要なルール:

  • lop は CPU 並列化用で、I/O 並行処理ではない — I/O ファンアウトには errgroup を使用
  • lom はイミュータビリティを破壊する — 割り当て圧力が測定される場合のみ使用、推定ではない
  • loi は Map → Filter → Take のようなチェーンで中間割り当てを削除し、遅延評価で実現
  • リアクティブ/ストリーミングパイプラインで無限イベントストリーム上 → samber/cc-skills-golang@golang-samber-ro スキル + samber/ro パッケージを参照

詳細なパッケージ比較と決定フローチャートについては、Package Guide を参照してください。

コアパターン

スライスを変換

// ✓ lo — 宣言的、型安全
names := lo.Map(users, func(u User, _ int) string {
    return u.Name
})

// ✗ 手動 — ボイラープレート、エラーしやすい
names := make([]string, 0, len(users))
for _, u := range users {
    names = append(names, u.Name)
}

Filter + Reduce

total := lo.Reduce(
    lo.Filter(orders, func(o Order, _ int) bool {
        return o.Status == "paid"
    }),
    func(sum float64, o Order, _ int) float64 {
        return sum + o.Amount
    },
    0,
)

GroupBy

byStatus := lo.GroupBy(tasks, func(t Task, _ int) string {
    return t.Status
})
// map[string][]Task{"open": [...], "closed": [...]}

エラーバリアント — 最初のエラーで停止

results, err := lo.MapErr(urls, func(url string, _ int) (Response, error) {
    return http.Get(url)
})

よくある間違い

間違いなぜ失敗するか修正方法
slices.Contains が存在する場合に lo.Contains を使用stdlib がカバーしている操作に対して不要な依存Go 1.21+ 以降では slices.Containsslices.Sortmaps.Keys を使用
10 項目で lop.Map を使用ゴルーチン作成オーバーヘッドが変換コストを超えるlo.Map を使用 — lop の利点は CPU バウンド作業で ~1000+ 項目から始まる
lo.Filter が入力を変更すると想定lo はデフォルトではイミュータブル — 新しいスライスを返すインプレース変異が明示的に必要な場合は lom.Filter を使用
本番コードパスで lo.Must を使用Must はエラー時にパニックする — テストと init では問題ないが、リクエストハンドラーでは危険Must 以外のバリアントを使用してエラーを処理
大規模データで多くの積極的な変換をチェーン各ステップが中間スライスを割り当てるloi (遅延イテレータ) を使用して中間割り当てを回避

ベストプラクティス

  1. stdlib が利用可能な場合は prefer stdlibslices.Containsslices.Sortmaps.Keys は依存関係を伴わない。stdlib が提供しない変換 (Map、Filter、Reduce、GroupBy、Chunk、Flatten) に lo を使用
  2. lo 関数を合成 — ネストされたループを書く代わりに、lo.Filterlo.Maplo.GroupBy をチェーン。各関数はビルディングブロック
  3. 最適化する前にプロファイルgo tool pprof が割り当てまたは CPU をボトルネックとして確認した後のみ、lo から lom/lop に切り替え
  4. エラーバリアントを使用lo.Map + 手動エラー収集よりも lo.MapErr を使用。エラーバリアントは早期に停止し、きれいに伝播
  5. lo.Must はテストと init のみで使用 — 本番環境では、エラーを明示的に処理

クイックリファレンス

関数何をするか
lo.Map各要素を変換
lo.Filter / lo.Reject述語にマッチする要素を保持/削除
lo.Reduce要素を単一の値に折り畳む
lo.ForEach副作用のイテレーション
lo.GroupByキーでグループ化
lo.Chunk固定サイズのバッチに分割
lo.Flattenネストされたスライスを 1 レベル平坦化
lo.Uniq / lo.UniqBy重複を削除
lo.Find / lo.FindOrElse最初のマッチまたはデフォルト
lo.Contains / lo.Every / lo.Someメンバーシップテスト
lo.Keys / lo.Valuesマップのキーまたは値を抽出
lo.PickBy / lo.OmitByマップエントリをフィルタ
lo.Zip2 / lo.Unzip22 つのスライスをペア/アンペア
lo.Range / lo.RangeFrom数値シーケンスを生成
lo.Ternary / lo.Ifインライン条件分岐
lo.ToPtr / lo.FromPtrポインタヘルパー
lo.Must / lo.Tryエラー時パニック/ブール値として回復
lo.Async / lo.Attempt非同期実行/バックオフでリトライ
lo.Debounce / lo.Throttleレート制限
lo.ChannelDispatcher複数チャネルへのファンアウト

完全な関数カタログ (300+ 関数) については、API Reference を参照してください。

合成パターン、stdlib 相互運用、およびイテレータパイプラインについては、Advanced Patterns を参照してください。

samber/lo でバグまたは予期しない動作が発生した場合は、github.com/samber/lo/issues で issue をオープンしてください。

クロスリファレンス

  • samber/cc-skills-golang@golang-samber-ro スキルで、無限イベントストリーム上のリアクティブ/ストリーミングパイプライン (samber/ro パッケージ) を参照
  • samber/cc-skills-golang@golang-samber-mo スキルで、lo 変換と合成するモナド型 (Option、Result、Either) を参照
  • samber/cc-skills-golang@golang-data-structures スキルで、適切な基礎データ構造を選択する方法を参照
  • samber/cc-skills-golang@golang-performance スキルで、lom/lop に切り替える前のプロファイリング手法を参照

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

詳細情報

作者
samber
リポジトリ
samber/cc-skills-golang
ライセンス
MIT
最終更新
不明

Source: https://github.com/samber/cc-skills-golang / ライセンス: MIT

関連スキル

OpenAIデータ・分析⭐ リポ 1,451

hugging-face-trackio

Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。

by gradio-app
汎用データ・分析⭐ リポ 855

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が天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。

by star23
Anthropic Claudeデータ・分析⭐ リポ 380

protein_solubility_optimization

タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。

by SpectrAI-Initiative
Anthropic Claudeデータ・分析⭐ リポ 1,743

research-lookup

Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。

by K-Dense-AI
Anthropic Claudeデータ・分析⭐ リポ 299

tree-formatting

ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。

by majiayu000
汎用データ・分析⭐ リポ 145

querying-indonesian-gov-data

インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。

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