値が指定されたインターフェイスに準拠しているかどうかを検証することは、Go プログラミングの重要な側面です。この疑問は、値の型が不明で動的チェックが必要な場合に発生します。
提供されたコード スニペットでは、val 変数は MyType 文字列のインスタンスであり、 Somether インターフェイスを直接実装しないでください。型を動的にチェックするには、型アサーションを使用します。
_, ok := val.(Somether)
このアサーションは、val 値を Somether インターフェイスに変換しようとします。 ok 変数は、変換が成功したか (true)、失敗したか (false) を示します。ただし、このアプローチでは、値がインターフェイス タイプである必要がありますが、常にそうであるとは限りません。
より明示的な方法は、目的のインターフェイスを埋め込むことです。値の型に代入します:
var _ Somether = (*MyType)(nil)
この構文は、値の型の nil ポインターをインターフェイス変数に割り当てます。値の型がインターフェイスを実装している場合、コードはエラーなしでコンパイルされます。それ以外の場合、コンパイラはエラーをスローします。
たとえば、この場合:
func (mt MyType) Method() bool { return true }
MyType 型は Somether インターフェイスのメソッドを実装します。したがって、次のコードはコンパイルされても何も行われません。
var _ Somether = (*MyType)(nil)
一般に、値がインターフェイスを実装していることを確認するためにコンパイル時チェックを使用することが望ましいです。実行時の動的チェックに依存するのではなく、コンパイル時に実行します。コンパイル時のチェックにより、より強力な型安全性が提供され、予期しないエラーを防ぐことができます。
以上がコンパイル時または実行時に Go 値が特定のインターフェイスを実装しているかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。