go / expert
Snippet
Allokationsfreie Konvertierung von String zu Byte-Slice
Standardkonvertierungen kopieren Speicher. Die Verwendung des unsafe-Pakets ermöglicht die Neuinterpretation des zugrunde liegenden Speicher-Headers, um Allokationen zu vermeiden, erfordert jedoch eine sorgfältige Verwaltung der String-Immutabilität.
snippet.go
1
2
3
4
5
6
7
func StringToBytes(s string) []byte {return unsafe.Slice(unsafe.StringData(s), len(s))}func BytesToString(b []byte) string {return unsafe.String(unsafe.SliceData(b), len(b))}
Erklärung
1
unsafe.StringData(s)
Ruft den Zeiger auf die zugrunde liegenden Daten des Strings ab, ohne zu kopieren.
2
unsafe.Slice(...)
Konstruiert einen neuen Slice-Header, der auf den vorhandenen Speicher zeigt.