Возвращаемое значение slice2 этого кода [[1 1] [1 1]].
И это меня путало, потому что я ожидал [[0 0] [1 1]].
Я не могу понять, почему возвращается [[1 1] [1 1]], а не [[0 0] [1 1]].
Буду признателен, если кто-нибудь сможет это объяснить. Благодарю.Golang slice добавляет встроенную функцию, возвращающую значение
slice := []int{0, 0}
slice2 := [][]int{}
for i := range slice {
slice[0] = i
slice[1] = i
slice2 = append(slice2, slice)
}
fmt.Println(slice2)
Вы можете проверить код в этой ссылке play.golang.org
В частности, 'slice' представляет собой структуру с 3 полями: указатель на базовый массив, мощностью и длиной. Поскольку вы обновляете элементы среза по индексу, вы изменяете базовый массив. Поскольку вы добавляете один и тот же срез дважды, оба относятся к одному и тому же базовому массиву, поэтому изменение значений во второй итерации цикла изменяет то, что имеет первый срез, и значения. – Kaedys