Go での型キャスト: 型アサーションとアイデンティティについて
Go では、型エイリアスからその型エイリアスへの型キャストを実行できない基礎となる関数の型は多くの開発者を困惑させてきました。この動作の背後にある理由を詳しく見てみましょう。
Go は、型操作のための 2 つのメカニズム、型アサーションと型変換を提供します。提供されたスニペットで使用される型アサーションは、インターフェイス型に格納されている値が特定の型であることを保証します。ただし、型変換とは異なり、型アサーションは型の同一性に厳密に準拠します。これは、インターフェイス値の動的型がアサートされた型と同一である必要があり、互換性や継承関係の余地がないことを意味します。
提供されたコードでは、型エイリアス somethingFuncy は int パラメーターを持つ関数を表し、ブール戻り値の型。関数 funcy をインターフェイス変数 a に割り当てると、関数を動的にバインドできる Go の機能のおかげで成功しますが、a の型が somethingFuncy であると主張することは、正確な型同一性の要件により失敗します。
要約すると、Go では次のように入力します。アサーションは、関数のシグネチャや互換性関係よりも、正確な型の一致を優先します。したがって、関数を表す型エイリアスにキャストするには、明示的な型宣言を行って、アサートされたインターフェイス値の動的型がエイリアス定義と一致することを確認する必要があります。
以上がGo で関数型エイリアスにキャストすると型アサーションが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。