Heim >Backend-Entwicklung >Golang >Go-Aliastypkonvertierung: Erstellt sie tiefe Kopien der zugrunde liegenden Daten?
Bei der Arbeit mit Aliastypen in Go fragt man sich möglicherweise, ob es zu Konvertierungen zwischen dem Alias und dem zugrunde liegenden Typ kommt in Kopien. Um diese Frage zu untersuchen, analysieren wir ein Beispiel:
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(ms)
Frage: Sind ms oder s2 vollständige Kopien von s (wie []byte(s) es wäre), oder tun sie das? stellen lediglich Kopien der String-Struktur dar (halten einen Zeiger auf das Original). Wert)?
Antwort:
Gemäß der Go-Spezifikation zu Konvertierungen „ändern alle anderen Konvertierungen nur den Typ, nicht aber die Darstellung von x.“ Daher wird beim Konvertieren in und aus dem zugrunde liegenden Typ eines benutzerdefinierten Typs keine Kopie erstellt. In diesem Fall sind ms und s2 keine Kopien von s, sondern lediglich unterschiedliche Darstellungen desselben zugrunde liegenden Werts.
Übergabe von Aliastypen an Funktionen:
Bei der Übergabe eines Alias Wenn Sie einen Typ in eine Funktion eingeben, wird eine Kopie des Werts erstellt. Durch die Kopie wird jedoch keine neue Instanz des zugrunde liegenden Werts erstellt. Zum Beispiel:
func foo(s MyString) { ... } foo(ms(s)) // No copy is made here
Hier handelt es sich bei der an die Funktion übergebenen Kopie um den MyString-Deskriptor und nicht um die tatsächliche Zeichenfolge, auf die ms verweist.
Das obige ist der detaillierte Inhalt vonGo-Aliastypkonvertierung: Erstellt sie tiefe Kopien der zugrunde liegenden Daten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!