Слайс — это заголовок из 3 полей: указатель на массив, длина (len), ёмкость (cap). Размер заголовка 24 байта.
s := make([]int, 3, 10)
// len=3, cap=10
// s[0], s[1], s[2] доступны
// s[3] — panic, хотя cap позволяет
При append если len < cap — записывает в существующий массив. Если len == cap — создаёт новый массив побольше и копирует.
Слайс передаётся по значению (копируется заголовок), но данные общие — изменения видны в оригинале. Однако если append вызвал рост — это уже новый массив и оригинал не затронут.