Назад к вопросам
JuniorТеорияОчень часто
Что выведет программа?
package main
import "fmt"
func change(n int, p *int, s []int) {
n, *p, s[0] = 10, 20, 30
}
func main() {
a, b, s := 1, 2, []int{3}
change(a, &b, s)
fmt.Println(a, b, s[0])
}1 20 30
- Ждать
10 20 30: Go передаёт все аргументы по значению, поэтомуn— копияa, и запись в неё оставляетaравным 1. - Ждать
1 20 3: заголовок среза копируется, но копия указывает на тот же массив, поэтомуs[0] = 30видно вmain.
- Почему append к срезу внутри функции иногда не виден снаружи?
- Чем метод с указательным получателем отличается здесь от метода со значением?