Bestätigungen und Konvertierungen benannter Typen in Go
Beim Definieren benutzerdefinierter Typen in Go ist es möglich, vordefinierte Typen mit einem neuen Namen neu zu definieren. Beim Versuch, diese benutzerdefinierten Typen in Funktionen zu verwenden, die den vordefinierten Typ erwarten, können jedoch Fehler auftreten. Lassen Sie uns die Gründe für diese Fehler untersuchen und Lösungen erkunden.
Betrachten Sie den folgenden Code:
<code class="go">type Answer string func acceptMe(str string) { fmt.Println(str) } func main() { var ans Answer = "hello" // Cannot use ans (type Answer) as type string in function argument acceptMe(ans) // Invalid type assertion: ans.(string) (non-interface type Answer on left) acceptMe(ans.(string)) // Works, but why? acceptMe(string(ans)) }</code>
Warum die Typzusicherung fehlschlägt
Typ Behauptungen funktionieren nur für Schnittstellen. Schnittstellen können jeden zugrunde liegenden Typ haben, was eine Typzusicherung oder einen Typwechsel ermöglicht. In diesem Fall ist Answer jedoch ein benutzerdefinierter Typ mit einem einzigen zugrunde liegenden Typ, dem String. Es ist keine Typzusicherung erforderlich, da die Konvertierung in den zugrunde liegenden Typ garantiert erfolgreich ist.
Warum die Konvertierung funktioniert
Konvertierungen hingegen können durchgeführt werden zwischen Typen, die eine bekannte Beziehung haben, wie es bei Antwort und Zeichenfolge der Fall ist. Die Syntax string(ans) konvertiert den Antworttyp explizit in den zugrunde liegenden String-Typ.
Fazit
Es ist wichtig, den Unterschied zwischen Typzusicherungen und -konvertierungen zu verstehen. Typzusicherungen sollten mit Schnittstellen verwendet werden, um den zugrunde liegenden Typ dynamisch zu überprüfen. Konvertierungen hingegen werden verwendet, um explizit zwischen Typen mit bekannten Beziehungen zu konvertieren. Im Fall von Antwort und Zeichenfolge ist die Konvertierung der empfohlene Ansatz, da sie eine vorhersehbare und klare Möglichkeit bietet, mit dem zugrunde liegenden Typ zu interagieren.
Das obige ist der detaillierte Inhalt vonWarum schlägt die Typzusicherung bei benutzerdefinierten Typen in Go fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!