Есть такой тест:
func fn(got []string) func(string) {
return func(input string) {
got = append(got, input)
}
}
func TestWalk(t *testing.T) {
cases := getCases()
for _, test := range cases {
t.Run(test.Name, func(t *testing.T) {
var got []string
walk(test.Input, fn(got))
if !reflect.DeepEqual(got, test.ExpectedCalls) {
t.Errorf("got %v, want %v", got, test.ExpectedCalls)
}
})
}
}
Если в 10й строке пишу
walk(test.Input, func(input string) {
got = append(got, input)
})
то тесты проходят нормально.
Насколько я понимаю, срезы передаются по ссылке, возвращаемая анонимная функция в `fn` имеет доступ к `got`. Объясните пожалуйста :-)