Files
deep_go/lessons/slices_and_arrays/append_implementation/main.go

40 lines
754 B
Go
Raw Normal View History

package main
import "fmt"
func Append(slice []int, data ...int) []int {
previousLength := len(slice)
newLength := previousLength + len(data)
if newLength > cap(slice) {
// without smart growth for big slices
capacity := previousLength * 2
if capacity == 0 {
capacity = 1
}
newSlice := make([]int, capacity)
copy(newSlice, slice)
slice = newSlice
}
slice = slice[:newLength]
copy(slice[previousLength:newLength], data)
return slice
}
func main() {
data := []int{}
data = append(data, 1)
data = append(data, 2)
data = append(data, 3)
data = append(data, 4)
data = append(data, 5)
data = append(data, 6)
data = append(data, 7)
data = append(data, 8)
data = append(data, 9)
fmt.Println(data, len(data), cap(data))
}