Go 基础之切片

18 min read

1.切片是引用类型
2.切片做为参数传递给函数的意义重大,同数组,当传递较大的数组切片时可以有效的提升cpu执行效率
3.new 用于各种类型的内存分配 返回的是指针,var variables = new(T)
返回的是T,指针类型,即返回的是一个地址,默认是当前类型的零值,它返回了一个指针,指向新分配的类型 T 的零值。也就是说new 返回指针。
4.make 用来分配内存主要用来分配引用类型,比如channel ,map ,slice,返回一个有初始值 (非零) 的 T 类型,不是T类型

make 和 new

make 关键字的作用是创建切片、哈希表和 Channel 等内置的数据结构,而 new 的作用是为类型申请一片内存空间,并返回指向这片内存的指针。

slice := make([]int, 0, 100)
hash := make(map[int]bool, 10)
ch := make(chan int, 5)
  1. slice 是一个包含 datacaplen 的结构体 reflect.SliceHeader
  2. hash 是一个指向 runtime.hmap 结构体的指针;
  3. ch 是一个指向 runtime.hchan 结构体的指针;
package main

import "fmt"

func main() {
  i := new([]int)
  fmt.Println(*i)
  *i = append(*i, 1)
  fmt.Println(i)
}

引用类型初始化为nil

基本数据类型声明有初始值

引用类型声明没有分配内容空间

package main

import "fmt"

func main() {
  var a []int
  var b map[int]string
  fmt.Println(a == nil)  // true
  fmt.Println(b == nil)  // true
}