go / expert
Snippet
Sichere Low-Level Byte-View-Konstruktion mittels Unsafe Slice- und String-Primitiven
Die Go 1.20 Standardbibliothek hat `unsafe.StringData` und `unsafe.Slice` eingeführt. Diese bieten typsichere Unsafe-Speicherprimitiven, die herkömmliche Reflect-Header-Strukturen beim Erstellen von Byte-Slices direkt auf String-Speicherpuffer umgehen.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package mainimport ("fmt""unsafe")func ViewBytes(s string) []byte {if len(s) == 0 {return nil}return unsafe.Slice(unsafe.StringData(s), len(s))}func main() {str := "Antigravity core engine"bView := ViewBytes(str)fmt.Printf("View len=%d, first_byte=0x%x\n", len(bView), bView[0])}
Erklärung
1
return unsafe.Slice(unsafe.StringData(s), len(s))
Verwendet sichere Low-Level-Primitiven aus Go 1.20+, um einen Byte-Slice-Header direkt auf die String-Speicheradresse zu setzen.
2
bView := ViewBytes(str)
Erzeugt eine schreibgeschützte Slice-Ansicht des String-Speicherinhalts.
3
fmt.Printf("View len=%d, first_byte=0x%x\n", len(bView), bView[0])
Liest zugrundeliegende Speicher-Bytes sicher aus, während die ursprünglichen Daten unverändert bleiben.