go / expert
Snippet
Reinterpretation von Festarray-Speicher in Slices mittels unsafe.Slice
Das unsafe-Paket ermöglicht Zero-Copy-Konvertierungen zwischen Zeigern auf Festarrays und dynamischen Slices. unsafe.Slice konstruiert ein Slice basierend auf einem Zeiger und einer Länge, sodass Änderungen im Slice direkt den Speicher des zugrunde liegenden Arrays modifizieren.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package mainimport ("fmt""unsafe")func main() {var arr [4]uint32 = [4]uint32{0x01, 0x02, 0x03, 0x04}ptr := unsafe.SliceData(arr[:])sl := unsafe.Slice(ptr, len(arr))sl[0] = 0xFFfmt.Printf("Original Array: %v\nReinterpreted Slice: %v\n", arr, sl)}
Erklärung
1
ptr := unsafe.SliceData(arr[:])
Ermittelt einen Rohzeiger auf das zugrunde liegende Element des Speicher-Arrays.
2
sl := unsafe.Slice(ptr, len(arr))
Erstellt einen Slice-Header, der direkt auf dem Speicher ab ptr mit der angegebenen Länge basiert.