Будет напечатано [A B TT E], затем [B TT]. Слайс b имеет длину 1, но capacity 3, поэтому append записывает TT в общий массив c.
Влияние функции append на исходный слайс
Будет напечатано [A B TT E], затем [B TT]. Слайс b имеет длину 1, но capacity 3, поэтому append записывает TT в общий массив c.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой вывод будет у программы и выясните, изменит ли вызов append исходный слайс c. Также укажите, какие элементы окажутся в слайсе b после выполнения кода.
package main
import "fmt"
func main() {
c := []string{"A", "B", "D", "E"}
b := c[1:2]
b = append(b, "TT")
fmt.Println(c) // ?
fmt.Println(b) // ?
}
Ответ
Будет напечатано [A B TT E], затем [B TT]. Слайс b имеет длину 1, но capacity 3, поэтому append записывает TT в общий массив c.
b начинается с c[1], следовательно его новая позиция 1 совпадает с c[2], где раньше было D. Длина c не меняется. Если нужно сохранить исходный массив при дописывании, используйте b := c[1:2:2]; для полной независимости также от прямых присваиваний нужна копия.