Типы с пустыми []
, такие как []int
, на самом деле являются слайсами, а не массивами. В Go размер массива является частью типа, поэтому для того, чтобы иметь массив, вам нужно иметь что-то вроде [16]int
, а указатель на него будет *[16]int
. Итак, то, что вы на самом деле уже делаете, - это использование слайсов, и указатель на слайс, *[]int
, не нужен, так как слайсы уже передаются по ссылке.
Также помните, что вы можете легко передать фрагмент, ссылающийся на весь массив, с помощью &array
(при условии, что тип элемента фрагмента совпадает с типом элемента массива). (Больше нет.)
Пример:
package main
import "fmt"
func sumPointerToArray(a *[8]int) (sum int) {
for _, value := range *a { sum += value }
return
}
func sumSlice (a []int) (sum int) {
for _, value := range a { sum += value }
return
}
func main() {
array := [...]int{ 1, 2, 3, 4, 5, 6, 7, 8 }
slice := []int{ 1, 2, 3, 4 }
fmt.Printf("sum arrray via pointer: %d\n", sumPointerToArray(&array))
fmt.Printf("sum slice: %d\n", sumSlice(slice))
slice = array[0:]
fmt.Printf("sum array as slice: %d\n", sumSlice(slice))
}
Редактировать : Обновлено, чтобы отразить изменения в Go с тех пор, как это было впервые опубликовано.