40 lines
754 B
Go
40 lines
754 B
Go
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))
|
|
}
|