Go 1.18 では、ジェネリックの導入により、エラー処理が強化される可能性があります。 「Either[A,B]」型を作成すると、型 A または B のいずれかの値を表現できるようになります。
このアプローチは、「通常の」と「通常の」の両方を返すという従来の Go のイディオムとは異なります。 ' 値とエラー値。nil エラーは正常に返されたことを示します。ただし、値が A または B の両方ではなくどちらかであることを伝えることが望ましい動作である場合、これは問題となる可能性があります。
インターフェイス メソッドの制限を克服する
Switch メソッドの型パラメーターを使用したインターフェイスの定義は、インターフェイス メソッドに型パラメーターを持たせないという制限のため、失敗しました。これを回避するための代替アプローチは、オプション性の概念を導入することです。
オプション性とどちらかの型
オプション型は、 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 または型の値の存在を表します。
type Left[A, B any] struct { data A } type Right[A, B any] struct { data B }
実際の例
次の例
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 中国語 Web サイトの他の関連記事を参照してください。