The Go Programming Language Specification
Appending to and copying slices
普通切片中的内置函数追加和复制辅助
操作。对于这两个函数,结果与是否
参数引用的内存重叠。
可变参数函数 append 将零个或多个值 x 附加到 s 的
类型 S,必须是切片类型,并返回结果切片,
也是 S 类型的。值 x 被传递给 ...T 类型的参数
其中 T 是 S 的元素类型和相应的参数传递
规则适用。作为一种特殊情况,append 也接受第一个参数
可分配给类型 []byte 并带有字符串类型的第二个参数
后跟...。这种形式附加了字符串的字节。
append(s S, x ...T) S // T is the element type of S
如果 s 的容量不足以容纳附加值,
append 分配一个新的,足够大的底层数组,适合
现有的切片元素和附加值。除此以外,
append 重用底层数组。
s0 := []int{0, 0}
s1 := append(s0, 2) // append a single element s1 == []int{0, 0, 2}
s2 := append(s1, 3, 5, 7) // append multiple elements s2 == []int{0, 0, 2, 3, 5, 7}
s3 := append(s2, s0...) // append a slice s3 == []int{0, 0, 2, 3, 5, 7, 0, 0}
s4 := append(s3[3:6], s3[2:]...) // append overlapping slice s4 == []int{3, 5, 7, 2, 3, 5, 7, 0, 0}
var t []interface{}
t = append(t, 42, 3.1415, "foo") // t == []interface{}{42, 3.1415, "foo"}
var b []byte
b = append(b, "bar"...) // append string contents b == []byte{'b', 'a', 'r' }
函数 copy 将切片元素从源 src 复制到
目标 dst 并返回复制的元素数。两个都
参数必须具有相同的元素类型 T 并且必须可分配给
[]T 类型的切片。复制的元素数量是最小的
len(src) 和 len(dst)。作为一种特殊情况,copy 也接受一个
目标参数可分配给类型 []byte 与源参数
字符串类型的。这种形式将字符串中的字节复制到
字节切片。
copy(dst, src []T) int
copy(dst []byte, src string) int
例子:
var a = [...]int{0, 1, 2, 3, 4, 5, 6, 7}
var s = make([]int, 6)
var b = make([]byte, 5)
n1 := copy(s, a[0:]) // n1 == 6, s == []int{0, 1, 2, 3, 4, 5}
n2 := copy(s, s[2:]) // n2 == 4, s == []int{2, 3, 4, 5, 4, 5}
n3 := copy(b, "Hello, World!") // n3 == 5, b == []byte("Hello")