Go での型エイリアスへのキャスト
問題:
サンプル スニペットでは、最初のタイプのアサーションは、関数シグネチャを明示的に指定することで成功します。ただし、型エイリアス somethingFuncy にキャストしようとする 2 番目のアサーションはパニックになります。これはなぜそうなのでしょうか?また、より長い関数シグネチャにキャストする方法はありますか?
説明:
ここでは型キャストが関係しているという誤解に反して、 Go は型アサーションと型変換のみを提供します。焦点は、提供されたスニペットで使用されている型アサーションにあります。
型アサーションと変換の主な違いは、比較に使用される基準にあります。 int と MyInt を使用した例などの変換では、基になる型が考慮されます。ただし、型アサーションでは、正確な型のみが考慮されます。
詳しく説明すると、a が int 型である例では、int が MyInt と同一ではないため、アサーション a.(MyInt) は失敗します。どちらも同じ基礎となる型を共有している場合でも。
tl;dr:
Typeアサーションは正確な型の同一性をチェックします。つまり、somethingFuncy のような型エイリアスは func(int) bool とは異なります。したがって、2 番目のキャストは失敗します。
ボーナス:
スニペット内の型の同一性を検証するために使用されるコードは参考のために提供されており、アサーションに含まれる直接比較を示しています。プロセス。
以上がGo で型エイリアスにキャストすると型アサーションが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。