Heim >Backend-Entwicklung >Golang >Go-Aliastypkonvertierung: Erstellt sie tiefe Kopien der zugrunde liegenden Daten?

Go-Aliastypkonvertierung: Erstellt sie tiefe Kopien der zugrunde liegenden Daten?

Barbara Streisand
Barbara StreisandOriginal
2024-12-21 16:20:10333Durchsuche

Go Alias Type Conversion: Does it Create Deep Copies of Underlying Data?

Aliastypkonvertierung in Go: Erstellt es Kopien?

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!

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