首頁  >  文章  >  後端開發  >  我們如何在 Go 中實現通用錯誤處理而不丟失類型資訊?

我們如何在 Go 中實現通用錯誤處理而不丟失類型資訊?

DDD
DDD原創
2024-11-04 02:22:02418瀏覽

How Can We Implement Generic Error Handling in Go Without Losing Type Information?

有 Must Function 的錯誤處理泛型

使用同時傳回值和錯誤的函數時,處理錯誤可能會很麻煩。 Go 中缺乏泛型使得開發適用於所有可能場景的解決方案具有挑戰性。

提供的範例嘗試建立一個名為 P 的函數來包裝任何此類函數,如果發生錯誤就會失敗。雖然可以有效地處理錯誤,但它會丟失類型信息,從而導致接口為空。

一種潛在的解決方案涉及使用程式碼產生技術為您需要使用的每種特定類型建立 P 的特定實作。透過使用「gengen」、「genny」或「gen」等函式庫,您可以產生保留正確類型資訊的 P 的自訂實例。

例如,如果您的函數傳回一個整數和一個錯誤:

<code class="go">func MyFunction() (int, error) {
    ...
}</code>

使用程式碼產生器,您可以為此函數建立P 的特定實作:

<code class="go">func P_MyFunction(any interface{}, err error) (int) {
    if err != nil {
        panic("error: "+ err.Error())
    }
    return any.(int)
}</code>

此方法可確保維護類型訊息,讓您可以呼叫P_MyFunction 並無縫地處理傳回的整數。但是,它需要為每個函數和類型組合產生特定的實現,如果您有很多這樣的函數,這可能會很無聊。

以上是我們如何在 Go 中實現通用錯誤處理而不丟失類型資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn