Heim > Artikel > Backend-Entwicklung > Warum schlägt die Typzusicherung bei benutzerdefinierten Typen in Go fehl, die Konvertierung ist jedoch erfolgreich?
Benannte Typzusicherungen und -Konvertierungen in Go
In Go ermöglichen benannte Typzusicherungen und -konvertierungen Entwicklern die Bearbeitung benutzerdefinierter und vordefinierter Datentypen. Beim Umgang mit benutzerdefinierten Typen, die vordefinierte Typen neu definieren, kann es jedoch zu Missverständnissen kommen. Lassen Sie uns dieses Problem im Detail untersuchen.
Betrachten Sie das folgende Codebeispiel:
<code class="go">type Answer string func acceptMe(str string) { fmt.Println(str) } func main() { type Answer string var ans Answer = "hello" // Illegal usage acceptMe(ans) // Failed type assertion acceptMe(ans.(string)) // Works (but why?) acceptMe(string(ans)) }</code>
F: Warum schlägt die Typzusicherung (ans.(string)) während der Konvertierung fehl? (string(ans)) funktioniert?
A: Typzusicherungen gelten nur für Schnittstellentypen, die einen Vertrag darstellen, den ein Wert erfüllen kann. Da benutzerdefinierte Typen wie Answer keine Schnittstellen sind, führt der Versuch, sie mithilfe der Typzusicherungssyntax zu bestätigen, zu einem Fehler.
Im Gegensatz dazu wandeln Konvertierungen explizit einen Typ in einen anderen um. Die Konvertierung (string(ans)) ist erfolgreich, da Answer einen zugrunde liegenden String-Typ hat. Go konvertiert Ans implizit in die zugrunde liegende Zeichenfolge, bevor es an AcceptMe übergeben wird.
Zusätzliche Hinweise:
Das obige ist der detaillierte Inhalt vonWarum schlägt die Typzusicherung bei benutzerdefinierten Typen in Go fehl, die Konvertierung ist jedoch erfolgreich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!