capypad
0 Tage Serie
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
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.