goframe-v2
GoFrameフレームワーク(v2)を用いたGo開発スキル。Goファイルの作成・修正、サービス実装、API構築、データベース操作を行う際にトリガーされます。フロントエンドやシェルスクリプトの作業には使用しません。
description の原文を見る
GoFrame development skill. TRIGGER when writing/modifying Go files, implementing services, creating APIs, or database operations. DO NOT TRIGGER for frontend/shell scripts.
SKILL.md 本文
重要な慣例
プロジェクト開発標準
- 完全なプロジェクト(HTTP/マイクロサービス)の場合、GoFrame CLI をインストールして
gf initでプロジェクト雛形を作成してください。詳細はプロジェクト作成 - initを参照してください。 - 自動生成されたコードファイル(dao、do、entity)は GoFrame の慣例に従い、手動で作成・修正してはいけません。
- 特に要求がない限り、ビジネスロジックに
logic/ディレクトリを使用しないでください。ビジネスロジックはservice/ディレクトリに直接実装してください。 - 完全なプロジェクト例を参照してください:
- HTTP サービスベストプラクティス:
user-http-service - gRPC サービスベストプラクティス:
user-grpc-service
- HTTP サービスベストプラクティス:
コンポーネント使用標準
- 新しいメソッドや変数を作成する前に、他の場所に既に存在しないか確認し、既存の実装を再利用してください。
- すべてのエラーハンドリングに
gerrorコンポーネントを使用して、追跡可能性のための完全なスタックトレースを確保してください。 - 新しいコンポーネントを探索する際は、GoFrame 組み込みコンポーネントを優先し、例のベストプラクティスコードを参照してください。
- データベース操作には DO オブジェクトを使用する必要があります (
internal/model/do/)、g.Mapやmap[string]interface{}は使用しないでください。DO 構造体フィールドはinterface{}であり、未設定フィールドはnilのままで ORM によって自動的に無視されます:// 良い例 - DO オブジェクトを使用 dao.Users.Ctx(ctx).Where(cols.Id, id).Data(do.User{Uid: uid}).Update() // 良い例 - 条件付きフィールド、未設定フィールドは nil で無視される data := do.User{} if password != "" { data.PasswordHash = hash } if isAdmin != nil { data.IsAdmin = *isAdmin } dao.Users.Ctx(ctx).Where(cols.Id, id).Data(data).Update() // 良い例 - gdb.Raw を使用してカラムを明示的に NULL に設定 dao.Instances.Ctx(ctx).Where(cols.Id, id).Data(do.Instance{IdleSince: gdb.Raw("NULL")}).Update() // 悪い例 - データベース操作で g.Map を使用しない dao.Users.Ctx(ctx).Data(g.Map{cols.Uid: uid}).Update()
コードスタイル標準
- 変数宣言: 複数の変数を定義する場合、より良い配置と読みやすさのために
varブロックを使用してグループ化してください:// 良い例 - 配置が整っていて見やすい var ( authSvc *auth.Service bizCtxSvc *bizctx.Service k8sSvc *svcK8s.Service notebookSvc *notebook.Service middlewareSvc *middleware.Service ) // 避けるべき例 - 分散した宣言 authSvc := auth.New() bizCtxSvc := bizctx.New() k8sSvc := svcK8s.New() - このパターンは、同じスコープ内に 3 つ以上の関連する変数宣言がある場合に適用してください。
ソフトデリート & 時間管理
GoFrame は 自動的に ソフトデリートと時間管理機能を提供します。テーブルに created_at、updated_at、または deleted_at フィールドが含まれている場合、ORM がこれらを自動的に処理します。
自動時間フィールド
| フィールド | 自動動作 |
|---|---|
created_at | Insert/InsertAndGetId 時に自動書き込み、その後は変更されない |
updated_at | Insert/Update/Save 時に自動書き込み |
deleted_at | Delete 時に自動書き込み(ソフトデリート)、クエリ時に自動フィルタリング |
重要なルール
1. 時間フィールドを手動で設定してはいけません - GoFrame が自動的に処理します:
// 誤り - 冗長な手動時間設定
dao.User.Ctx(ctx).Data(do.User{
Name: "john",
CreatedAt: gtime.Now(), // 冗長! フレームワークが処理します
UpdatedAt: gtime.Now(), // 冗長! フレームワークが処理します
}).Insert()
// 正しい例 - フレームワークに時間フィールドを任せる
dao.User.Ctx(ctx).Data(do.User{
Name: "john",
}).Insert()
2. WhereNull(cols.DeletedAt) を手動で追加してはいけません - GoFrame は自動的にソフトデリートフィルタを追加します:
// 誤り - 冗長なソフトデリート条件
dao.User.Ctx(ctx).
Where(do.User{Status: 1}).
WhereNull(cols.DeletedAt). // 冗長! フレームワークが自動的に追加します
Scan(&list)
// 正しい例 - フレームワークが自動的に deleted_at IS NULL を追加
dao.User.Ctx(ctx).
Where(do.User{Status: 1}).
Scan(&list)
3. ソフトデリートに Delete() を使用してください - フレームワークは UPDATE SET deleted_at = NOW() に変換します:
// 正しい例 - Delete() を使用、フレームワークはソフトデリートを処理
dao.User.Ctx(ctx).Where(do.User{Id: id}).Delete()
// 実際の SQL: UPDATE `sys_user` SET `deleted_at`=NOW() WHERE `id`=?
// 誤り - deleted_at を使用した手動 Update
dao.User.Ctx(ctx).
Where(do.User{Id: id}).
Data(do.User{DeletedAt: gtime.Now()}). // 冗長!
Update()
フィールドタイプサポート
deleted_at フィールドは複数のタイプをサポートしています:
- DateTime/Timestamp: デフォルト、削除時刻を保存
- Integer: Unix タイムスタンプ(秒単位)を保存
- Boolean: 削除状態の 0/1 を保存
設定(オプション)
時間フィールド名は config.yaml でカスタマイズできます:
database:
default:
createdAt: "created_at" # カスタムフィールド名
updatedAt: "updated_at"
deletedAt: "deleted_at"
timeMaintainDisabled: false # true に設定するとこの機能を無効化
GoFrame ドキュメント
コンポーネント設計、使用方法、ベストプラクティス、および注意事項をカバーする完全な GoFrame 開発リソース: GoFrame Documentation
GoFrame コード例
HTTP サービス、gRPC サービス、および様々なプロジェクトタイプをカバーする豊富な実用的なコード例: GoFrame Examples
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- gogf
- リポジトリ
- gogf/skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/gogf/skills / ライセンス: Apache-2.0
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。