GORMはContextをサポートしています。メソッド WithContext
で使用できます。
シングルセッション
シングルセッションは通常、単一の操作を実行するときに使用されます。
db.WithContext(ctx).Find(&users) |
継続セッション
継続セッションは、通常、一連の操作を実行するときに使用されます。例:
tx := db.WithContext(ctx) |
Context timeout
timeoutを設定したcontextを db.WithContext
に渡すことで、時間がかかるクエリのタイムアウト時間を設定する事ができます。例:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) |
Hooks/Callbacks内でのcontextの使用
Statement
から Context
にアクセスすることが可能です。例:
func (u *User) BeforeCreate(tx *gorm.DB) (err error) { |
Chi Middlewareの例
継続セッションはAPIリクエストの処理に役立ちます。例えば、ミドルウェア内でのタイムアウト設定をしたContextを使って、*gorm.DB
を設定できます。 そして、その *gorm.DB
を使ってリクエストの処理を行います。
Chi ミドルウェアの例を以下に示します。
func SetDBMiddleware(next http.Handler) http.Handler { |
注
WithContext
でContext
を設定するのはゴルーチンセーフの処理です。 詳細はSessionを参照してください。
Logger
Loggerも Context
もに対応しており、ログのトラッキングに使用することができます。詳細については Logger を参照してください。