在 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中文網其他相關文章!