aList [5]int
bList = []int{1, 2}
cList = []int{1: 1, 4: 2}
dList = new([]int)
slice := make([]int, 10)
var slice []int = make([]int, 10)
// 以下两种方式的效果是一样的
slice := new([100]int)[0:50]
slice := make([]int, 50, 100)
make 函数的定义如下:
func make([]type, len, cap)
// len 为初始化时占用长度, cap 为可选参数容量
new 函数和 make 函数的区别:
主要功能都是在堆上面分配内存给需要的结构体。
- new 函数为每个新的类型 T 分配一片内存,初始化为 0 并且返回 *T 的内存地址,这种申请方式会返回一个 T 类型初始值为 0 的指针。
- make 函数返回一个类型为 T 的初始值,它只适用于创建 slice, map 和 channel。
更省资源的字符串添加方法
var buffer bytes.Buffer
for {
if s, ok := getNextString(); ok { //method getNextString() not shown here
buffer.WriteString(s)
} else {
break
}
}
fmt.Print(buffer.String(), "\n")
Go 中的字符串是不能被改变的,如果需要修改,需要先将 string 转换成 字节数组。
s := "hello"
c := []byte(s)
c[0] = 'c'
s2 := string(c) // s2 == "cello"
- 将切片 b 的元素追加到切片 a 之后:a = append(a, b...)
- 删除位于索引 i 的元素:a = append(a[:i], a[i+1:]...)
- 切除切片 a 中从索引 i 至 j 位置的元素:a = append(a[:i], a[j:]...)
- 为切片 a 扩展 j 个元素长度:a = append(a, make([]T, j)...)
- 在索引 i 的位置插入元素 x:a = append(a[:i], append([]T{x}, a[i:]...)...)
- 在索引 i 的位置插入长度为 j 的新切片:a = append(a[:i], append(make([]T, j), a[i:]...)...)
- 在索引 i 的位置插入切片 b 的所有元素:a = append(a[:i], append(b, a[i:]...)...)
- 取出位于切片 a 最末尾的元素 x:x, a = a[len(a)-1], a[:len(a)-1]
- 将元素 x 追加到切片 a:a = append(a, x)