Golang ジェネリックス - 関数ポインターを渡すときに同じ型の代わりに型を使用することはできません
私は golang を初めて使用しており、次の構造を勉強しています:
リーリーここで、T
は int
または bool
次の関数を定義しました:
リーリーbool などのさまざまなデータ型に対して上記の関数を使用しようとすると、次のようになります。
リーリー次のエラー メッセージが表示されます:
リーリー「X」を「X」として使用できないというメッセージが表示され、非常にわかりにくくなっています。ここで私が間違っていることを理解するのを手伝ってくれませんか?
正解
まず第一に、ここで大規模なユースケースを評価するのは困難ですが、ランタイム型を実行しているため、ジェネリックはここでは最適ではない可能性がありますチェック (例: f.defaultValue.(T)
)。
2 番目に、go 1.20
を使用しているようですが、混乱を招くエラーが発生します:
https://www.php.cn/link/63e8e3643e7f7198858eef325b0600f9
リーリー 最新の Playground バージョン (この記事の執筆時点では go 1.21
) を使用すると、より詳細なコンパイル エラーが発生します:
https://www.php.cn/link/2d1bcedd27b586d2a9562a0f8e076b41
リーリー型を示します bool
指定された位置 (./prog.go:13:14
) は型制約の結果です。
したがって、この型制約 bool
が非ジェネリック関数シグネチャと一致するという理由だけで、次のようになります。
リーリー
この人為的な例
を使用してコンパイル エラーを「解決」できます: リーリー ただし、繰り返しになりますが、ジェネリックは特定のユースケースにとって最適なソリューションではない可能性があると思います。
以上がGolang ジェネリックス - 関数ポインターを渡すときに同じ型の代わりに型を使用することはできませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











関数の継承では、「基底クラス ポインター」と「派生クラス ポインター」を使用して継承メカニズムを理解します。基底クラス ポインターが派生クラス オブジェクトを指す場合、上方変換が実行され、基底クラスのメンバーのみにアクセスされます。派生クラス ポインターが基本クラス オブジェクトを指す場合、下向きキャストが実行される (安全ではない) ため、注意して使用する必要があります。

Sublime Text で Python コードを実行するためのショートカット キーは次のとおりです。 Windows および Linux: Ctrl + BMac: Cmd + B コード内にカーソルを置きます。ショートカットキーを押します。コードは、システムのデフォルトの Python インタープリタを使用して実行されます。

Notepad++ 自体は C 言語プログラムを実行できず、コードをコンパイルして実行するには外部コンパイラが必要です。外部コンパイラを使用するには、次の手順に従ってセットアップします: 1. C 言語コンパイラをダウンロードしてインストールします; 2. Notepad++ でカスタム ツールを作成し、コンパイラの実行可能ファイルのパスとパラメータを構成します; 3. C 言語プログラムを選択し、.c ファイル拡張子を付けて保存します。 4. C 言語プログラム ファイルを選択し、[実行] メニューからコンパイルするカスタム ツールを選択します。 5. コンパイル結果を表示し、コンパイル エラーまたは成功メッセージを出力します。 。コンパイルが成功すると、実行可能ファイルが生成されます。

Java の val キーワードは、不変のローカル変数を宣言するために使用されます。つまり、その値は一度割り当てられると変更できません。特徴は次のとおりです。 不変性: val 変数は、一度初期化されると再割り当てできません。ローカル スコープ: val 変数は、宣言されているコード ブロック内でのみ表示されます。型推論: Java コンパイラーは、割り当てられた式に基づいて val 変数の型を推論します。ローカル変数のみ: val は、クラス フィールドやメソッド パラメーターではなく、ローカル変数を宣言するためにのみ使用できます。

Java プログラミング言語の「=」演算子は、変数に値を代入し、式の右側の値を左側の変数に格納するために使用されます。使用法: 変数 = 式。ここで、変数は割り当てを受け取る変数の名前であり、式は値を計算または返すコード セグメントです。

const 修飾子は定数を示し、値は変更できません。static 修飾子は変数の有効期間とスコープを示します。 const によって変更されたデータ メンバーは、初期化後に変更できません。static によって変更された変数は、プログラムの開始時に初期化され、プログラムの終了時に破棄されます。アクティブなオブジェクトがなくても存在し、関数間でアクセスできます。 const で変更されたローカル変数は宣言時に初期化する必要がありますが、static で変更されたローカル変数は後で初期化できます。 const 修飾されたクラス メンバー変数はコンストラクターまたは初期化リストで初期化する必要がありますが、静的修飾されたクラス メンバー変数はクラスの外部で初期化できます。

Java ジェネリック メソッドで型パラメーターを制限するには、Bound が型またはインターフェイスである構文を使用します。そのため、パラメーターは、Bound から継承するタイプ、または Bound インターフェイスを実装するタイプのみを受け入れます。たとえば、T をそれ自体と同等の型に制限します。

Go言語の位置付けに関する議論:上位言語の特徴は何ですか?ソフトウェア開発の分野において、プログラミング言語は設計目標や位置付けに応じていくつかのカテゴリに分類され、そのうちの1つが上位言語と呼ばれます。高レベル言語とは、下位レベルの言語よりも抽象的かつ高レベルのプログラミング言語を指し、通常、より強力な機能とより高い抽象レベルを備え、複雑な機能をより迅速に実装できます。 Go言語は現代のプログラミング言語としては上位言語とも言えますが、どのような特徴があるのでしょうか。次に議論します
