„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Erstellt die Aliastypkonvertierung von Go Kopien?

Erstellt die Aliastypkonvertierung von Go Kopien?

Veröffentlicht am 21.12.2024
Durchsuche:412

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 Aliastypen 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 zu a führen Laufzeitkosten aufgrund von Darstellungsänderungen. 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 im Allgemeinen Kopien erstellt 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()

wird keine Kopie erstellt. Zusammenfassend lässt sich sagen, dass Konvertierungen zwischen Aliastypen zwar keine Kopien des zugrunde liegenden Werts erstellen, dieses Prinzip jedoch nicht auf die Übergabe von Werten an Funktionen ausgedehnt wird wo in der Regel Kopien angefertigt werden.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3