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

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

Mary-Kate Olsen
リリース: 2024-12-13 16:41:10
オリジナル
339 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート