变量-常量-字面量


1
2
3
4
a := 1
const b int = 1
// a 变量 b 常量 1 字面量
// 综上所述 字面量就是等号后面的数据

数组


  1. Go内置的函数**len()**可以返回数组的元素个数
  2. […]int “…”省略号出现在数组长度的位置,数组的长度就由初始化数组的元素个数决定
  3. [3]int与[4]int是不同的类型,并且 数组长度的位置必须是常量表达式
  4. […]int{99:-1},表示总共由一百个元素,第九十九个为-1,其他都为0
  5. [5]string{1: “ok”, 2: “o” } 这里的起始位置就是索引为1的地方
  6. 数组作为形参的时候,是另外创建一个副本,是值传递的形式,要与其他语言分开来
  7. 要实现地址传递,直接使用数组指针,*[9]int

slice


slice表示一个拥有相同类型原始的可变长度的类型

指针 长度 容量

  • 长度和容量

    切片的长度就是它所包含的元素个数。

    切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。

    切片可以按需自动增长和缩小,增长一般使用内置的 append 函数来实现,而缩小则是通过对切片再次进行切割来实现。

  • 创建slice

    1
    2
    3
    4
    5
    6
    // 直接创建,并赋予字面量
    a := []int{123}
    // 使用make, 长度和容量可以忽略
    a := make([]int)
    a := make([]int,len)
    a := make([]int,len,cap)
  • 截取符

    1
    2
    3
    4
    5
    6
    // 左闭右开形式
    a := []int{1,2,3}
    b := a[1:2] // b = [1]
    c := a[1:] // c= [2,3]
    d := a[:2] // d= [1,2]
    e := a[:] // e= [1,2,3]
  • append()

    1
    2
    3
    4
    5
    a := make([]int,3)
    a = append(a,1)
    // 增加多个元素
    slice = append(slice, 1, 2)
    slice = append(slice,slice2)
  • 删除

    1
    2
    3
    4
    5
    // 如果是两段的元素就直接使用[:]的方法截取
    // 如果是中间的元素
    var s = []int{1, 2, 3, 4}
    s = append(s[:2], s[3:]...) // 三个点不能忘记
    fmt.Println(s) // [1 2 4]
  • 修改

    直接通过索引修改

  • 查询

    直接通过索引查询

  • copy()

    1
    2
    copy( destSlice, srcSlice []T) int
    // 将 srcSlice 赋值到 destSlice中 ,如果加入的两个数组切片不一样大,就会按照其中较小的那个数组切片的元素个数进行复制。
  • 比较

    slice是不能用== 来比较是否相同的,这与数组不同。

    如果是[]byte 可以使用bytes.Equal来比较

    else 其他类型的切片就用for range 比较吧

  • 判断切片为空

    1
    2
    3
    4
    //正确
    len(slice)= 0
    //错误
    slice = nil