ホームページ >バックエンド開発 >Golang >構造体ポインタをインターフェイスに安全に変換して Go に戻すにはどうすればよいですか?

構造体ポインタをインターフェイスに安全に変換して Go に戻すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-13 16:41:10392ブラウズ

How Can I Safely Convert a Struct Pointer to an Interface and Back in Go?

構造体ポインタをインターフェイスに変換する

次のシナリオを考えてみましょう。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。