Heim >Backend-Entwicklung >Golang >Wie kann ich einen Strukturzeiger sicher in eine Schnittstelle und zurück in Go konvertieren?

Wie kann ich einen Strukturzeiger sicher in eine Schnittstelle und zurück in Go konvertieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-13 16:41:10404Durchsuche

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

Strukturzeiger in Schnittstelle konvertieren

Stellen Sie sich das folgende Szenario vor:

type foo struct{}

func bar(baz interface{}) {}

Angenommen, foo und bar sind unveränderlich und baz auf einen foo-Strukturzeiger in bar wiederhergestellt werden muss, stellt sich die Frage: Wie kann man &foo{} umwandeln? interface{} zur Verwendung als Parameter in bar?

Lösung

Das Umwandeln von &foo{} in interface{} ist unkompliziert:

f := &foo{}
bar(f) // Every type implements interface{}. No special action is needed.

Um zu *foo zurückzukehren, können Sie Folgendes ausführen:

Typ Assertion

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
}

Typschalter

func bar(baz interface{}) {
    switch f := baz.(type) {
    case *foo: // f is of type *foo
    default: // f is some other type
    }
}

Mit diesen Techniken können Sie Strukturzeiger erfolgreich in Schnittstellen konvertieren und sie wieder in Strukturzeiger wiederherstellen innerhalb von Funktionen.

Das obige ist der detaillierte Inhalt vonWie kann ich einen Strukturzeiger sicher in eine Schnittstelle und zurück in Go konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn