Warum schlägt die Typzusicherung bei benutzerdefinierten Typen in Go fehl?

Patricia Arquette
Freigeben: 2024-11-04 08:49:30
Original
737 Leute haben es durchsucht

Why Does Type Assertion Fail with Custom Types in Go?

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>
Nach dem Login kopieren

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!