Что выведет: s := []int{1,2,3}; s2 := s[:2]; s2 = append(s2, 4); fmt.Println(s)?

Middle
168 просмотров
AFK Offer AI

Выведет [1 2 4]. s2 делит underlying array с s. append(s2, 4) не вызывает рост потому что cap(s2) == 3, есть место. Элемент 4 записывается в s[2]. Это side effect reslice — модификация через один slice влияет на другой. Фикс: s2 := append([]int{}, s[:2]...) — создать независимую копию.

Следующий вопрос

Как работает compress/gzip?