Heim > Artikel > Backend-Entwicklung > Wie kann ich in Go ein Byte-Slice aus einem String abrufen, ohne den Speicher zu kopieren?
Problem:
Sie müssen einen String konvertieren in ein Byte-Slice kopieren, ohne die Leistungseinbußen einer Speicherkopie in Kauf nehmen zu müssen, insbesondere bei der Verarbeitung großer Datenmengen.
Antwort:
Schritt 1: Verstehen Sie die Speicherkopie Problem
Strings in Go sind unveränderlich, was bedeutet, dass sie nicht an Ort und Stelle geändert werden können. Daher führt die Konvertierung einer Zeichenfolge in ein Byte-Slice mit der Syntax []byte(string) zu einer Speicherkopie.
Schritt 2: Unsicher verwenden
Um Speicher zu verhindern Beim Kopieren können unsichere Vorgänge eingesetzt werden. Die unsafe.String-Funktion kann verwendet werden, um einen Zeiger auf die zugrunde liegenden String-Daten abzurufen.
<code class="go">import "unsafe" func unsafeGetBytes(s string) []byte { return (*[0x7fff0000]byte)(unsafe.Pointer( (*reflect.StringHeader)(unsafe.Pointer(&s)).Data), )[:len(s):len(s)] }</code>
Erklärung:
Zusätzliche Überlegungen:
Das obige ist der detaillierte Inhalt vonWie kann ich in Go ein Byte-Slice aus einem String abrufen, ohne den Speicher zu kopieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!