Heim >Backend-Entwicklung >Golang >Warum funktionieren Typzusicherungen nicht für benannte Typen in Go?
In Go werden benannte Typzusicherungen verwendet, um zu testen, ob ein Wert eine bestimmte Schnittstelle implementiert. Dieser Ansatz gilt jedoch nicht direkt für benannte Typen, die vordefinierte Typen mit einem neuen Namen neu definieren.
Betrachten Sie den folgenden Code:
<code class="go">type Answer string func acceptMe(str string) { fmt.Println(str) } func main() { type Answer string var ans Answer = "hello" // Type assertion fails: acceptMe(ans.(string)) // Conversion to underlying type succeeds: acceptMe(string(ans)) }</code>
Die Typzusicherung ans.(string ) schlägt fehl, da versucht wird zu prüfen, ob der Antworttyp die Zeichenfolgenschnittstelle implementiert, was nicht der Fall ist. Stattdessen ist „Antwort“ ein benutzerdefinierter Typ, der die Zeichenfolge neu definiert.
Andererseits ist die Konvertierung „string(ans)“ erfolgreich, da sie den Antwortwert direkt in den zugrunde liegenden Zeichenfolgentyp konvertiert. Da Answer ein benannter Typ für Zeichenfolgen ist, ist diese Konvertierung immer gültig.
Warum funktioniert die Typzusicherung nicht für benannte Typen?
Typzusicherungen sind für gedacht Schnittstellen. Eine Schnittstelle kann mehrere Implementierungen haben (sogenannte konkrete Typen), und Typzusicherungen werden verwendet, um zu überprüfen, ob ein Wert diese Schnittstelle implementiert. Ein benannter Typ verfügt jedoch über einen festen zugrunde liegenden Typ, der zur Kompilierungszeit bekannt ist. Daher sind Typzusicherungen unnötig und können nicht für benannte Typen durchgeführt werden.
Wann sollte die Konvertierung anstelle der Typzusicherung verwendet werden?
Verwenden Sie die Konvertierung, wenn Sie einen benannten Typ konvertieren möchten Typ zu seinem zugrunde liegenden Typ. Dies ist nützlich, wenn Sie einen Wert an eine Funktion oder Schnittstelle übergeben müssen, die einen bestimmten Typ erwartet, aber den zugrunde liegenden Typ akzeptieren kann.
Das obige ist der detaillierte Inhalt vonWarum funktionieren Typzusicherungen nicht für benannte Typen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!