Go数组和切片

  • 数组

    Go语言中的数组和python中的列表,php中的关联数组还不一样。python中的列表和php中的关联数组可以任意伸缩,而go中的数组则需要指定数组的长度,一旦长度确定就不允许修改。
    
    // 只能存入三个字符串
    var arr1 [3]string = [3]string{"a","b",c}
    // 语法糖 ... , 在给变量赋值时可以不指定个数,同时也可以打散数据,类似于python中的* 和 **
    arr1 := [...]int{1,2,3,4}
    
  • 切片

    • 动态数组,可以认为就是python中的列表,由三部分组成 指针,长度,容量。

    • 使用make函数可以创建一个切片 make([]int,2,4) -> []int 指针 2切片长度 4切片容量

    • 使用字面量也可以创建一个切片 arr := []int{10,20,30,40} 切片的长度和容量都为4

    • 创建字符串切片并初始化第100个元素 str_slice := []string(99:"")

  • 切片限制容量 arr := arr1[2:3:4] 设置的容量不能大于切片的容量,这个案例中切片的容量为5,如果将4换成6 则会报 panic: runtime error: index out of range [2] with length 1 错误,一般设置可用容量和长度一致。

    • 例子

      arr := [...]int{1,2,3,4,5}
      fmt.Println(arr[0:1])
      
      // 声明一个切片使用make关键字
      slice := make(类型,长度,容量(可选))
      // 查看容量大小 使用cap函数
      cap(slice)
    
      // 切片添加数据
      tmp := make([]int,8,10) // 前8位都是0 [0,0,0,0,0,0,0]
      tmp = append(tmp,1) // 在前8位的基础上追加1 [0,0,0,0,0,0,0,1]
      tmp = append(tmp,2) // 在前9位的基础上追加2 [0,0,0,0,0,0,0,1,2]
    
    // 使用语法糖 ...解包的作用
    arr := []int{2,4,6}
    arr = append(arr,[]int{7,8,9}...)
    
原文地址:https://www.cnblogs.com/wuxiaoshi/p/14393962.html