0 Tage Serie
go / intermediate
Snippet

Konvertieren von Slices in Array-Pointer für Garantien fester Größe

In Go können Slices direkt in Array-Pointer konvertiert werden, wenn die Slice-Größe mindestens der Array-Länge entspricht. Dies ermöglicht es, Slices an Funktionen zu übergeben, die Arrays fester Größe erwarten, ohne die Elemente zu kopieren, und sorgt für Laufzeitvalidierung.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main
import "fmt"
func processThreeElements(arr *[3]int) {
arr[0] = 100
arr[1] = 200
arr[2] = 300
}
func main() {
slice := []int{10, 20, 30}
arrPtr := (*[3]int)(slice)
processThreeElements(arrPtr)
fmt.Println("Modified Slice:", slice)
}
Erklärung
1
func processThreeElements(arr *[3]int) {
Eine Funktion, die einen Zeiger auf ein Array fester Größe mit 3 Elementen erwartet.
2
arrPtr := (*[3]int)(slice)
Konvertiert das Slice in einen Array-Pointer der Größe 3. Löst zur Laufzeit ein Panic aus, wenn das Slice kürzer als 3 ist.
3
processThreeElements(arrPtr)
Übergibt den Array-Pointer an die Funktion, wodurch der zugrunde liegende Speicher des Slices geteilt wird.