2 回答

TA貢獻2019條經(jīng)驗 獲得超9個贊
如果您有 http.Request,您可以訪問其中的上下文和值。如果您沒有請求但需要上下文:獲取上下文并將其作為顯式參數(shù)傳遞到您的調(diào)用樹(按照慣例,它是第一個參數(shù))。
(Go 中沒有魔法,任何沒有直接或間接傳遞到函數(shù)中的東西都不存在。)

TA貢獻1719條經(jīng)驗 獲得超6個贊
首先,您應(yīng)該將上下文傳遞到需要的地方。如果您的Config()函數(shù)中需要它,請將其傳遞到那里:
func Config(ctx context.Context) {
/* ... * /
}
但是您可能會Config()在啟動時調(diào)用一次,而不是根據(jù)請求調(diào)用一次,這導(dǎo)致了我的第二點:
您不應(yīng)該將上下文或一般請求范圍的數(shù)據(jù)傳遞給配置函數(shù)。這完全是本末倒置。
相反,您應(yīng)該將記錄器傳遞到處理程序/中間件中,并讓它記錄請求數(shù)據(jù):
func handleSomePath(logger *logrus.Entry) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
/* do something */
logger.WithFields(logrus.Fields{
"request_id": /* ... */
})
}
}
- 2 回答
- 0 關(guān)注
- 155 瀏覽
添加回答
舉報