我想我的日誌記錄方法輸出某種請求ID。要做到這一點,我需要傳遞一個請求對象(或一些派生)到日誌記錄功能。有沒有一種靜態方法來獲取Go中的當前請求/上下文?
從請求處理程序登錄時這一切都很好,但圖書館式的方法內使用時,因爲我不希望那些知道任何正在進行的HTTP的請求是有問題的。
此外,控制檯應用程序將來可能會使用那些相同的庫方法,並且request-id將被某種worker-thread-id替換。
利用上下文來解決問題,但這意味着我將有一個上下文參數添加到我的方法,這是有點討厭。
所以,基本上,我需要的是某種被法夠程調用之間傳遞的靜態存儲。
我不知道有沒有像在圍棋什麼,所以也許我的做法是完全關閉基地,在這種情況下,我會很樂意聽到的是一個更好的方法來解決上述問題。
謝謝,
「所以,基本上,我需要的是在方法和goroutine調用之間傳遞的某種靜態存儲。」沒有這樣的事情,Go作者不喜歡goroutine id或存儲之類的東西。 「我很樂意聽到解決上述問題的更好方法。」 - >「使用上下文解決了這個問題,但這意味着我必須爲我的所有方法添加一個上下文參數。」你解決了這個問題。 「......這有點討厭」,如果你覺得如此,那麼你就不得不做些惱人的事情。你會管理。 – Volker
當解決方案中的所有方法都包含相同的參數時,它看起來很糟糕。 它通過創建「此方法是否需要上下文?」的問題增加了複雜性。每當寫一個新的方法時,需要一個上下文可能比正在編寫的方法更深。 是的,如果這是唯一的選擇,我會使用上下文,或者刪除日誌中的請求ID,但在此之前,我寧願看看是否有更好的選項。 – Svarog
對您而言,不好的口味被其他人認爲是最佳做法(請參閱https://blog.golang.org/context#TOC_5。)。沒有明智的方式來討論品味,特別是在編程方面。 – Volker