基本语法

语法 作用
make func make(Type, args) 分配内存,返回一个初始化的数据结构(但若len设置为0,那就没初始化
只能创建slice、channel、map
new func **<font style="color:rgb(51, 51, 51);">new</font>**(Type) *Type 用于分配内存并返回一个指向该内存的指针。它通常用于创建用户定义的类型的实例,如结构体(struct)

NOTE:未初始化的标志

  1. 初始化的标志是:切片有指向底层数组的指针,如果是二维以上,还需要保证作为元素的切片,也要保证有指向底层数组的指针
  2. 未初始化的表现
    1. len =0
    2. 元素全为nil
      1. 注意,经过make函数生成切片,如x :=make([]int, 0, 3),并没初始化,x[0]或者x[2]都是会报错的,也就是说,及时经过make函数创建,也并一定初始化
      2. fmt.println(x)并不会显示[nil, nil, nil]只会显示[]
      3. 只有x :=make([]int, 2, 3); fmt.println(x),才会显示[0, 0]

应用场景

slice

func make(Type, len, cap)len是必选参数,cap是可选参数(要求cap >= len;若省略cap,则cap=len)

  1. 一维切片
返回什么? 注意点
make([]int, 2, 4) [0, 0, nil, nil](后面的nil不显示,我为了直观写出来的) 有长度的部分默认为零值
make([]int, 0, 4) nil 实际此时切片未初始化,因为len = 0,不可调用,但可以append
make([]int) 按语法书来说不和规矩,但我确实有时候看到了,应该是创建了一个len和cap都为0的切片 不可以调用,但可以append,等同于slice := []int{}
  1. 二维切片
    1. 初始化问题
      make函数 - 图1
    2. 为初始化完全不能调用(本质是不能nil.xxx之类的),只能append

channel

myMap := make(map[K]V, capacity)

  • K 表示映射的键类型。
  • V 表示映射的值类型。
  • capacity 表示映射的初始大小,即可以容纳的键值对数量。这个参数是可选的,如果省略,映射将以默认大小创建。

map

ch := make(chan T, capacity)

  • T 表示通道中传输的数据的类型。
  • capacity 表示通道的容量,即可以缓存的元素数量。这个参数是可选的,如果省略,将创建一个无缓冲的通道。