Heim > Backend-Entwicklung > Golang > Wie kann ich Typzusicherungen für einen „reflect.TypeOf()'-Rückgabewert in Go durchführen?

Wie kann ich Typzusicherungen für einen „reflect.TypeOf()'-Rückgabewert in Go durchführen?

Susan Sarandon
Freigeben: 2024-12-23 06:45:10
Original
271 Leute haben es durchsucht

How Can I Perform Type Assertions on a `reflect.TypeOf()` Return Value in Go?

Typzusicherung mithilfe von Reflection in Go

In Go stellen Typzusicherungen einen Mechanismus bereit, um den Typ eines Schnittstellenwerts zu überprüfen und zu konvertieren ordne es einem bestimmten Typ zu, wenn es übereinstimmt. Manchmal kann es jedoch vorkommen, dass Sie einen von „reflect.TypeOf()“ zurückgegebenen Typ in einen bestimmten Typ umwandeln müssen.

Problem: Behauptungen erfordern einen Typ, keinen Typ

In Ihrem Beispiel versuchen Sie, einen Typ einem Typ zuzuordnen, indem Sie die folgende Zeile verwenden:

1

item2 := i.(reflect.TypeOf(i))  // reflect.TypeOf(i) is not a type

Nach dem Login kopieren

Hier ist item2 nicht gültig, weil Reflect.TypeOf(i) gibt einen *reflect.Type zurück, der selbst kein Typ ist. Typzusicherungen erwarten einen Typ, keinen Typdeskriptor.

Lösung: Typschalter verwendenh

Ein Ansatz, dies zu handhaben, besteht darin, einen Typschalter auf der Schnittstelle zu verwenden{ } Wert:

1

2

3

4

switch i.(type) {

case *reflect.Type:

    // Code to handle reflect.Type here

}

Nach dem Login kopieren

Damit können Sie spezifische Aktionen basierend auf dem tatsächlichen Typ der Schnittstelle ausführen{} Wert.

Alternativer Ansatz: Reflexionsscannen

Wenn Sie bestimmte Typen innerhalb einer Schnittstelle bestätigen müssen{}, können Sie Reflexion verwenden, um die Felder des Werts zu scannen:

1

2

3

4

5

6

7

s := reflect.ValueOf(i)

for i := 0; i < s.NumField(); i++ {

    switch s.Field(i).Interface().(type) {

    case int:

        // Code to handle integer field here

    }

}

Nach dem Login kopieren

Mit diesem Ansatz können Sie Typprüfungen für einzelne Felder innerhalb der Schnittstelle durchführen{} Wert.

Schlussfolgerung:

Typzusicherungen mit „reflect.TypeOf()“ in Go erfordern einen bestimmten Typ, keinen Typdeskriptor. Um solche Szenarien zu bewältigen, können Sie Typschalter oder Reflexionsscans verwenden, um den tatsächlichen Typ des Interface{}-Werts zu bestimmen.

Das obige ist der detaillierte Inhalt vonWie kann ich Typzusicherungen für einen „reflect.TypeOf()'-Rückgabewert in Go durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage