Instanziierungsschnittstelle

WBOY
Freigeben: 2024-02-08 21:08:41
nach vorne
371 Leute haben es durchsucht

Instanziierungsschnittstelle

Der PHP-Editor Youzi ist hier, um Ihnen vorzustellen, was eine Instanziierungsschnittstelle ist. In der objektorientierten Programmierung ist eine Schnittstelle eine Konvention, die die Methoden definiert, die eine Klasse implementieren soll. Das Instanziieren einer Schnittstelle bezieht sich auf das Erstellen eines Objekts einer Klasse, um die in der Schnittstelle definierten Methoden zu implementieren. Durch die Instanziierung der Schnittstelle können wir die polymorphe Funktion nutzen, sodass verschiedene Klassen dieselbe Schnittstelle implementieren und die entsprechenden Methoden entsprechend der tatsächlichen Situation neu schreiben können. Die Verwendung von Instanziierungsschnittstellen kann unseren Code flexibler und erweiterbarer machen und die Wiederverwendbarkeit und Wartbarkeit des Codes verbessern. Schauen wir uns die Verwendung und Vorsichtsmaßnahmen der instanziierten Schnittstelle genauer an.

Frageninhalt


Ich bin neu dabei. Was ich nicht verstehe, ist, warum ich einen Kompilierungsfehler erhalte, wenn ich die Schnittstelle einzeln instanziieren möchte, aber nicht, wenn ich die Array-Form der Schnittstelle verwende.

type Flag interface {
  fmt.Stringer
}

func TestCheckRequiredFlag(t *testing.T) {
    testdata := []struct {
        st []Flag
    }{
        {
            st: []Flag{//allowed
                &StringFlag{Name: ""},
            },
        },
    }

    st := struct {
        st Flag
    }{
        st: Flag{// is not allowed
            &StringFlag{Name: ""},
        },
    }
}
Nach dem Login kopieren

Dieses zusammengesetzte Literal weist eine neue Strukturinstanz mit dem angegebenen Wert zu.


Problemumgehung


geschweifte Klammern {} 用于切片、结构、数组和映射的文字值。它们不用于接口值。如果您想要接口类型的文字值,则必须使用 () Syntax, die „Typkonvertierung“ aufruft.

Zum Beispiel:

x := myinterface(&mystruct{})
Nach dem Login kopieren

x 的类型为 myinterface.

So korrigieren Sie Ihren Code:

    st := struct {
        st flag
    }{
        st: flag(
            &stringflag{name: ""},
        ),
    }
Nach dem Login kopieren

Sie können die Typkonvertierung auch vollständig entfernen, da go eine direkte Zuweisung zu Schnittstellenwerten ermöglicht und die Konvertierung implizit erfolgt. Genauer gesagt besagt die Zuweisbarkeitsregel (aus Gründen der Klarheit bearbeitet):

Wenn t ein Schnittstellentyp ist und x t implementiert, dann ist ein Wert x vom Typ v einer Variablen vom Typ t zuweisbar.

Dieser Code funktioniert also auch:

    st := struct {
        st Flag
    }{
        st: &StringFlag{Name: ""},
    }
Nach dem Login kopieren
Beachten Sie, dass in zusammengesetzten Literalen wie Slices, Strukturen und Karten die angegebenen Werte ihren jeweiligen Indizes, Feldern oder Schlüsseln so

zugewiesen behandelt werden, als wären sie Variablen, sodass Zuweisungsregeln gelten.

Das obige ist der detaillierte Inhalt vonInstanziierungsschnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!