ホームページ > バックエンド開発 > Golang > いずれかの型を使用する場合、ジェネリックスは Go でのエラー処理をどのように改善できるでしょうか?

いずれかの型を使用する場合、ジェネリックスは Go でのエラー処理をどのように改善できるでしょうか?

Linda Hamilton
リリース: 2024-12-11 14:32:14
オリジナル
243 人が閲覧しました

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 メソッドの型パラメーターを使用したインターフェイスの定義は、インターフェイス メソッドに型パラメーターを持たせないという制限のため、失敗しました。これを回避するための代替アプローチは、オプション性の概念を導入することです。

オプション性とどちらかの型

オプション型は、 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート