In Go, arrays are values. When you assign an array to another variable or pass it to a function, Go copies the entire array:
a := [3]int{1, 2, 3}
b := a // b is a copy of a
b[0] = 99 // changing b doesn't affect a
fmt.Println(a[0]) // still 1
This copying can be expensive for large arrays. Slices avoid this problem by sharing underlying data.