Löst die Zuweisung zwischen Aliasen das Kopieren in Go aus?
Go ermöglicht die Definition benutzerdefinierter Typen mithilfe von Aliasen. Es bestehen Bedenken, ob Konvertierungen zwischen diesen Alias-Typen zu Kopien oder lediglich zu strukturellen Änderungen führen.
Betrachten Sie dieses Beispiel:
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(s) // Are ms or s2 a full copy of s?
Antwort:
Gemäß den Konvertierungsregeln von Go können nicht konstante Konvertierungen zwischen numerischen Typen oder Zeichenfolgen aufgrund von Darstellungsänderungen zu Laufzeitkosten führen. Bei allen anderen Konvertierungen, beispielsweise zwischen Aliasen, behält die ursprüngliche Darstellung jedoch bei, ohne Kopien zu erstellen.
Daher sind sowohl ms als auch s2 keine vollständigen Kopien von s, sondern verweisen auf denselben zugrunde liegenden Wert .
Auswirkungen auf Funktionsaufrufe:
Bei der Übergabe von Werten an Funktionen werden in der Regel Kopien erstellt. Dies gilt jedoch nicht für Aliastypen. Das Zuweisen eines aliastypisierten Werts zu einem Funktionsparameter löst kein Kopieren aus:
func foo(s MyString){ ... } foo(ms) // No copy is made when passing ms to foo()
Zusammenfassend lässt sich sagen, dass bei Konvertierungen zwischen Aliastypen keine Kopien des zugrunde liegenden Werts erstellt werden, dieses Prinzip sich jedoch nicht auf die Übergabe von Werten an erstreckt Funktionen, bei denen im Allgemeinen Kopien erstellt werden.
Das obige ist der detaillierte Inhalt vonErstellt die Aliastypkonvertierung von Go Kopien?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!