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

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

Выведет 3, 4. y := x копирует slice header (ptr, len, cap). append(y, 4) вызывает рост (len==cap==3), выделяет новый array. x и y теперь указывают на разные массивы. Но если cap был больше len — append не аллоцирует, и x и y делят массив. Это зависит от capacity, поэтому поведение append "непредсказуемо" без знания cap.

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

Как кэшировать go mod в CI?