一.切片

  • 切片的英文名称slice
  • 切片:具有可变长度相同类型元素序列.
  • 由于长度是可变,可以解决数组长度在数据个数不确定情况下浪费内存的问题.
  • 切片和数组声明时语法最主要的区别就是长度

    1. var slice []string //切片
    2. var array [3]string //数组
  • 切片只声明时为nil,没有开辟内存空间,不能直接操作切片,需要先初始化

    • 注意:切片只能和nil进行判断是否相等
      1. var slice []string //切片
      2. fmt.Println(slice==nil)//输出:true
      3. fmt.Printf("%p",slice)//输出:0x0

二.定义切片

  • 通过直接指定初始值定初始化一个切片变量

    1. names := []string{"smallming", "佳明哥"}
    2. fmt.Println(names)
  • 定义完切片后就可以通过切片对象[脚标]取出或修改切片中元素内容.语法和数组相同

三.切片是引用类型

  • 引用类型在变量之间赋值时传递的是地址.引用类型变量就是这个类型的指针.切片就是引用类型
  • 值类型在变量之间赋值时传递的是值的副本
    1. names := []string{"smallming", "佳明哥"}
    2. names1 := names
    3. names1[0] = "张"
    4. fmt.Println(names, names1)//输出:[张 佳明哥] [张 佳明哥]
    5. fmt.Printf("%p %p",names,names1)//地址相同