GORM 的脈絡支援,由 WithContext
方法啟用,是一個強大的功能,它增強了 Go 應用程式中資料庫操作的彈性和控制力。它允許在不同的操作模式、逾時設定,甚至整合到掛鉤/回呼和中間件中進行脈絡管理。讓我們深入探討這些不同的面向
單一工作階段模式
單一工作階段模式適合執行個別操作。它確保特定操作在脈絡的範圍內執行,允許更好的控制和監控。
db.WithContext(ctx).Find(&users) |
持續工作階段模式
持續工作階段模式非常適合執行一系列相關操作。它在這些操作中維護脈絡,這在交易等場景中特別有用。
tx := db.WithContext(ctx) |
脈絡逾時
在傳遞給 db.WithContext
的脈絡上設定逾時,可以控制長時間執行查詢的持續時間。這對於維持效能和避免資料庫互動中的資源鎖定至關重要。
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) |
掛鉤/回呼中的脈絡
脈絡也可以在 GORM 的掛鉤/回呼中存取。這允許在這些生命週期事件中使用脈絡資訊。
func (u *User) BeforeCreate(tx *gorm.DB) (err error) { |
與 Chi 中間件整合
GORM 的脈絡支援延伸到網路伺服器中間件,例如 Chi 路由器中的中間件。這允許為網路請求範圍內的所有資料庫操作設定具有逾時的脈絡。
func SetDBMiddleware(next http.Handler) http.Handler { |
注意:使用 WithContext
設定 Context
是 goroutine 安全的。這確保資料庫操作在多個 goroutine 中安全地管理。有關更多詳細資訊,請參閱 GORM 中的 Session 文件。
Logger Integration
GORM 的記錄器也接受 Context
,可用於記錄追蹤和與現有的記錄基礎架構整合。
有關更多詳細資訊,請參閱 Logger 文件。