Go でジェネリック型のデフォルト値の戻り値を処理するにはどうすればよいですか?
Dec 31, 2024 pm 06:57 PMGo でのジェネリック型のデフォルト値の戻り値の実装
Go では、言語に null 値がないため、空の値またはデフォルト値を返すときに問題が発生します。ジェネリック型。
Nil 戻り値の制限
検討次の汎用リスト実装:
type mylist[T any] struct { first *node[T] } type node[T any] struct { data T next *next[T] }
この例では、リストから最初の要素をポップおよび取得するためのメソッドを定義します:
func (list *mylist[T]) pop() T { if list.first != nil { data := list.first.data list.first = list.first.next return data } return nil } func (list *mylist[T]) getfirst() T { if list.first != nil { return list.first.data } return nil }
ただし、このコードをコンパイルするときは、コンパイラは、「return ステートメントでは T 値として nil を使用できません」というエラーを生成します。これは、Go がジェネリック型変数 T に暗黙的に nil を代入できないために発生します。
解決策: ゼロ値を返す
nil を返す代わりに、使用される特定の型 T のゼロ値を返すことができます。一般的なリストにあります。ゼロ値は次のとおりです。
- ポインタの場合は Nil
- 文字列の場合は空の文字列
- 整数および浮動小数点数の場合は 0
これを実現するには、型 T の変数を宣言し、次の値を返します。 it:
func getZero[T any]() T { var result T return result }
この関数を使用して、任意のジェネリック型のゼロ値を返すことができるようになりました。たとえば、さまざまな型に対してテストできます:
i := getZero[int]() fmt.Printf("%T %v\n", i, i) s := getZero[string]() fmt.Printf("%T %q\n", s, s) p := getZero[image.Point]() fmt.Printf("%T %v\n", p, p) f := getZero[*float64]() fmt.Printf("%T %v\n", f, f)
出力:
int 0 string "" image.Point (0,0) *float64 <nil>
このソリューションを使用すると、Go の任意のジェネリック型に対して適切なデフォルト値または空の値を返すことができます。
以上がGo でジェネリック型のデフォルト値の戻り値を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOの実際のパフォーマンスを正確に反映するベンチマークを作成するにはどうすればよいですか?
