Heim > Backend-Entwicklung > Golang > Erstellt die Aliastypkonvertierung von Go Kopien?

Erstellt die Aliastypkonvertierung von Go Kopien?

DDD
Freigeben: 2024-12-23 04:52:14
Original
732 Leute haben es durchsucht

Does Go's Alias Type Conversion Create Copies?

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?
Nach dem Login kopieren

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()
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage