」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何最小化 Go 中禁用追蹤日誌記錄語句的成本?

如何最小化 Go 中禁用追蹤日誌記錄語句的成本?

發佈於2024-11-09
瀏覽:991

How to Minimize the Cost of Disabled Trace Logging Statements in Go?

Go 中禁用語句的低成本追蹤日誌記錄

在Go 中,追蹤日誌記錄提出了一個獨特的挑戰:最大限度地減少關鍵路徑中停用日誌語句的成本。與 C/C 不同,Go 沒有預處理器宏,因此有必要探索替代解決方案。

一種方法涉及使用 fmt.Stringer 和 fmt.GoStringer 介面。透過延遲格式化直到日誌執行,可以避免日誌記錄參數中昂貴的函數呼叫:

type LogFormatter interface {
    LogFormat() string
}

// Inside the logger
if i, ok := i.(LogFormatter); ok {
    fmt.Println(i.LogFormat())
}

另一種策略是在執行時使用記錄器介面或在建置時使用建置約束交換記錄器。但是,這需要確保不會將昂貴的呼叫插入到日誌記錄參數中。

第三個選項是將 Logger 本身定義為布林值,減少冗長,同時提供一種簡潔的方法來控制日誌記錄:

type Log bool
func (l Log) Println(args ...interface{}) {
    fmt.Println(args...)
}

var debug Log = false

if debug {
    debug.Println("DEBUGGING")
}

最後,可以探索程式碼生成,儘管它不適合運行時配置。透過使用 gofmt -r 或使用文字/模板建立文件,可以為特定的偵錯場景建立單獨的偵錯版本。

最新教學 更多>
  • 為什麼curl_exec()回傳False以及如何有效處理它?
    為什麼curl_exec()回傳False以及如何有效處理它?
    當curl_exec()返回False時:深入研究錯誤處理領域在Web開發的世界中,curl_exec()函數在從遠端伺服器檢索資料方面起著至關重要的作用。然而,程式設計師經常遇到一個令人費解的情況,即該函數始終傳回 false。為了解開這個謎團,我們必須踏上錯誤檢查和處理的核心之旅。 當curl_...
    程式設計 發佈於2024-11-09
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-09
  • 如何消除 Bootstrap 堆疊行中的間隙:綜合指南
    如何消除 Bootstrap 堆疊行中的間隙:綜合指南
    Bootstrap 堆疊行中的間隙:綜合解決方案Bootstrap 堆疊行中存在間隙對於開發人員來說可能是一個令人沮喪的問題。為了解決這個問題,有幾種有效的解決方案可用。 1。設定元素高度標準化:為所有投資組合元素分配固定高度可確保內容的平均分佈。這消除了不同元素尺寸導致間隙的可能性。 2。使用 M...
    程式設計 發佈於2024-11-09
  • 為什麼使用“shell_exec”從 PHP 調用時我的 Bash 腳本無法執行?
    為什麼使用“shell_exec”從 PHP 調用時我的 Bash 腳本無法執行?
    從PHP 執行Bash 指令:腳本執行失敗故障排除在這個問題中,我們遇到一位PHP 開發人員嘗試使用shell_exec 從PHP 執行bash 腳本。使用的語法為:$output = shell_exec("./script.sh var1 var2");但是,當呼叫指令時腳本...
    程式設計 發佈於2024-11-09
  • 為什麼按鈕不拉伸以用“display: block”和“width: auto”填充容器?
    為什麼按鈕不拉伸以用“display: block”和“width: auto”填充容器?
    為什麼「display: block」和「width: auto」不能拉伸按鈕來填滿容器? 當使用“display: block”和“ width: auto” 在按鈕上,它可能會拉伸並填充其容器。然而,情況並非總是如此。特別是,現代瀏覽器中的按鈕在這方面的行為與其他區塊元素不同。 這種行為背後的原...
    程式設計 發佈於2024-11-09
  • 在 Docker 容器上設定 Redmine
    在 Docker 容器上設定 Redmine
    Redmine 是一個靈活的開源專案管理和問題追蹤 Web 應用程式。它廣泛用於管理專案、追蹤錯誤以及處理任務和截止日期。 Redmine 使用 Ruby on Rails 開發,具有高度可自訂性,支援廣泛的團隊協作和專案組織功能。 Redmine 因其靈活性、客製化和開源特性而成為商業專案管理工...
    程式設計 發佈於2024-11-09
  • 哪種 HTML5 Reset CSS 提供最全面的覆蓋範圍?
    哪種 HTML5 Reset CSS 提供最全面的覆蓋範圍?
    哪種 HTML5 Reset CSS 提供廣泛的覆蓋範圍? 大量的瀏覽器版本為網頁設計帶來了挑戰,需要使用重置CSS 確保跨平台的樣式一致。然而,鑑於可用選項過多,選擇正確的重設 CSS 可能會令人畏懼。 html5reset.org 擁有全面的覆蓋範圍,不僅包括重置填充和邊距,還包括解決圖像的潛在...
    程式設計 發佈於2024-11-09
  • 棘手的 Golang 面試問題 - 部分數據競賽
    棘手的 Golang 面試問題 - 部分數據競賽
    Here is another code review interview question for you. This question is more advanced than the previous ones and is targeted toward a more senior aud...
    程式設計 發佈於2024-11-09
  • 如何在 Python 中按列值對散佈圖進行顏色編碼?
    如何在 Python 中按列值對散佈圖進行顏色編碼?
    Python 中按列值對散點圖進行顏色編碼在資料視覺化中,為不同類別分配顏色可以增強清晰度並揭示模式。此功能在 R 的 ggplot2 中很容易使用,但是我們如何使用 pandas 和 matplotlib 在 Python 中實現相同的功能? 更新:Seaborn 增強功能Since 原始答案,S...
    程式設計 發佈於2024-11-09
  • 如何將日期轉換為數位格式以進行繪圖?
    如何將日期轉換為數位格式以進行繪圖?
    將日期轉換為數位格式以進行繪圖當日期以不同格式儲存時,根據日期繪製資料可能具有挑戰性,例如「1991 年1 月2 日。」本文提供了一種將日期轉換為可以輕鬆在x 軸上繪製的數位格式的解決方案。 如問題所述,使用 strftime('%Y%m%d') 轉換日期僅靠這一點可能還不夠。若要解...
    程式設計 發佈於2024-11-09
  • 在 JavaScript 中快取數組長度比直接長度存取更快嗎?
    在 JavaScript 中快取數組長度比直接長度存取更快嗎?
    優化 JavaScript 中的陣列迭代:快取長度與直接長度存取循環數組是 JavaScript 中的基本操作。但最快的方法是什麼?傳統觀點認為,快取數組的長度可以透過避免重複計算來提高效能。然而,有些人認為現代編譯器優化了直接長度存取。 爭論:快取與直接存取傳統上,建議的方法是快取陣列長度: f...
    程式設計 發佈於2024-11-09
  • 如何使用純 JavaScript 切換元素類別?
    如何使用純 JavaScript 切換元素類別?
    使用純 JavaScript 切換元素類別:綜合指南簡介在 JavaScript 中,控制元素類別對於動態 Web 開發至關重要。一項常見任務是切換類別以更改元素的外觀或功能。雖然 jQuery 讓這項任務變得簡單,但了解如何使用純 JavaScript 來完成它是至關重要的。 jQuery 解決方...
    程式設計 發佈於2024-11-09
  • 如何使用 Base64 對 OpenSearch 外掛的映像進行編碼?
    如何使用 Base64 對 OpenSearch 外掛的映像進行編碼?
    為 OpenSearch 插件編碼映像為 Firefox 或 IE 等瀏覽器開發 OpenSearch 插件時,base64 編碼對於表示映像至關重要。具體實現方法如下:方法一:線上編碼訪問線上文件編碼網站,例如[Base64 Encode](https:// /www. base64encode....
    程式設計 發佈於2024-11-09
  • 使用 Java 的 JarOutputStream 建立 JAR 檔案時如何避免意外問題?
    使用 Java 的 JarOutputStream 建立 JAR 檔案時如何避免意外問題?
    對JAR 檔案所建立的JarOutputStream 進行故障排除使用java.util.jar.JarOutputStream 以程式設計方式建立JAR 檔案看起來很簡單,但某些細微差別可能會導致意外問題。本文探討了這些未記錄的怪癖,並提供了用於建立有效 JAR 檔案的全面解決方案。 了解怪癖使用...
    程式設計 發佈於2024-11-09
  • 如何在不中斷內容流的情況下將 Div 絕對放置在右側:解決 Float:right 與 Position:absolute 的困境
    如何在不中斷內容流的情況下將 Div 絕對放置在右側:解決 Float:right 與 Position:absolute 的困境
    右浮動和絕對定位困境已解決在您追求一個div 能夠無縫地將其自身與其父級右側對齊,同時避免干擾其他內容,您偶然發現了一個障礙: float:right 和float:right的衝突行為position:absolute.Float 和Absolute 的衝突性質Float:right 透過將其他元...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3