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>
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!