Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen Typzusicherungen und Konvertierungen für benutzerdefinierte Typen in Go?

Was ist der Unterschied zwischen Typzusicherungen und Konvertierungen für benutzerdefinierte Typen in Go?

DDD
DDDOriginal
2024-11-06 10:32:02842Durchsuche

What's the Difference Between Type Assertions and Conversions for Custom Types in Go?

Verstehen der Unterschiede zwischen benannten Typzusicherungen und Konvertierungen in Go

Bei der Arbeit mit benutzerdefinierten Typen in Go ist es wichtig, die Nuancen zwischen benannten Typzusicherungen und -konvertierungen zu verstehen. Lassen Sie uns das Konzept anhand eines Beispiels untersuchen.

Betrachten Sie den folgenden Codeausschnitt, in dem wir einen benutzerdefinierten Antworttyp definieren, der den vordefinierten Zeichenfolgentyp neu definiert:

<code class="go">type Answer string</code>

Wir versuchen dann, Answer in zu verwenden eine Funktion, die einen Zeichenfolgentyp erwartet:

<code class="go">func acceptMe(str string) {
    fmt.Println(str)
}

func main() {
    type Answer string
    var ans Answer = "hello"

    // Assertion fails: cannot use ans (type Answer) as type string in function argument
    acceptMe(ans)

    // Type assertion fails as well: invalid type assertion: ans.(string) (non-interface type Answer on left)
    acceptMe(ans.(string))

    // Conversion succeeds.
    acceptMe(string(ans))
}</code>

Warum schlagen Behauptungen fehl?

Typzusicherungen gelten nur für Schnittstellen. Schnittstellen ermöglichen die Variation der zugrunde liegenden Typen. Um den tatsächlichen Typ zu bestimmen, verwendet Go die Typzusicherung (x.(T)) oder den Typschalter (switch x := x.(type)). Die Behauptung gibt einen booleschen Wert zurück, der angibt, ob die Behauptung erfolgreich war.

In unserem Fall ist Answer ein benannter Typ mit einem festen zugrunde liegenden Typ (String). Da der zugrunde liegende Typ bekannt ist, sind keine Behauptungen erforderlich. Es reicht aus, den Antworttyp mithilfe von string(ans) in einen String zu konvertieren.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Typzusicherungen und Konvertierungen für benutzerdefinierte Typen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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