構造体ポインタをインターフェイスに変換する
次のシナリオを考えてみましょう。
type foo struct{} func bar(baz interface{}) {}
foo と bar が不変であるとします。そして、baz を bar の foo 構造体ポインタに復元する必要がある場合、問題が発生します。 bar のパラメータとして使用するために &foo{} をインターフェイス{}にキャストできますか?
解決策
&foo{} をインターフェイス{}にキャストするのは簡単です:
f := &foo{} bar(f) // Every type implements interface{}. No special action is needed.
*foo に戻るには、次のコマンドを実行します。
タイプ アサーション
func bar(baz interface{}) { f, ok := baz.(*foo) if !ok { // The assertion failed because baz was not of type *foo. } // f is of type *foo }
タイプ スイッチ
func bar(baz interface{}) { switch f := baz.(type) { case *foo: // f is of type *foo default: // f is some other type } }
これらのテクニックを利用すると、次のいずれかを実行できます。構造体ポインターをインターフェースに変換し、関数内の構造体ポインターに戻します。
以上が構造体ポインタをインターフェイスに安全に変換して Go に戻すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。