给定切片 sl,将一个 []byte
数组追加到 sl 后面。写一个函数 Append(slice, data []byte) []byte
,该函数在 sl 不能存储更多数据的时候自动扩容。
package main
import (
"fmt"
)
func main() {
appendFunc()
}
func appendFunc() {
sl := []byte {'a', 'u', 'z', 's'}
data := []byte{'g', 'o', 'l', 'a', 'n', 'g'}
sliceVal := Append(sl, data)
fmt.Printf("slice = %c \n", sliceVal)
}
func Append(slice, data []byte) []byte {
// append的实现原理
// 直接使用比切片长度还要大的下标时,会报错内存溢出
// 所以要先make一个新的切片
lengthNewSlice := len(slice) + len(data)
// make新的切片时需注意总容量的大小,如果大于原切片,需扩充
capNewSlice := cap(slice)
if lengthNewSlice > cap(slice) {
capNewSlice = lengthNewSlice
}
// 经测试,数据类型不能作为变量传递进来,所以应该用switch来实现,此处不再赘述
newSlice := make([]byte, lengthNewSlice, capNewSlice)
// 接下来赋值
for sliceKey, sliceItem := range slice {
newSlice[sliceKey] = sliceItem
}
for dataKey, item := range data {
newSlice[dataKey + len(slice)] = item
}
// 赋值操作也可以用copy函数
return slice
}
网友评论