Arrays double its size when length of the slice exceeded the capacity of the underlying array. Essentially its a new array with elements copied from the old array into the new array. so appends are obviously linear time

Preallocating with make optimizes and potentially avoid reallocation when performance is crictical

make([]T, length, capacity)