首頁 >後端開發 >Golang >泛型如何使用任一類型來改進 Go 中的錯誤處理?

泛型如何使用任一類型來改進 Go 中的錯誤處理?

Linda Hamilton
Linda Hamilton原創
2024-12-11 14:32:14237瀏覽

How Can Generics Improve Error Handling in Go Using an Either Type?

Go 中使用泛型任一類型進行錯誤處理

在 Go 1.18 中,泛型的引入提供了增強錯誤處理的潛力。透過建立「Either[A,B]」類型,可以表示可以是 A 類型或 B 類型的值。

這種方法不同於傳統的 Go 習慣用法,即傳回「正常」 ' 值和錯誤值,其中 nil 錯誤表示成功返回。但是,當所需的行為是傳達某個值是 A 或 B,而不是兩者時,這可能會出現問題。

克服介面方法限制

嘗試由於介面方法必須沒有類型參數的限制,為 Switch 方法定義具有類型參數的 Either 介面並不成功。為了避免這種情況,另一種方法是引入可選性的概念。

可選性和任一類型

可選型別可以定義為有get() 方法要回傳一個值,要嘛回傳一個nil 錯誤,如果不存在值則傳回一個錯誤。然後可以根據可選性概念來定義 Either 類型:

type Either[A, B any] interface {
    is_left() bool
    is_right() bool
    find_left() Optional[A]
    find_right() Optional[B]
}

使用此方法,Either 類型可以實作為 Left 和 Right 變體,它們表示存在 A 類型或分別為 B。

type Left[A, B any] struct {
    data A
}

type Right[A, B any] struct {
    data B
}

真實範例

以下範例示範行動中的Either 類型:

var e1 Either[int, string] = left[int, string](4143)
var e2 Either[int, string] = right[int, string]("G4143")
...
if e1.is_left() {
    if l, err := e1.find_left().get(); err == nil {
        fmt.Printf("The int is: %d\n", l)
    } else {
        fmt.Fprintln(os.Stderr, err)
    }
}
...

此程式碼有效地擷取和處理Either 值,示範了可選性概念如何提供靈活且富有表現力的方式來處理錯誤或在Go 中表示可選值。

以上是泛型如何使用任一類型來改進 Go 中的錯誤處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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