go 切片
使用数组的时候,会不会觉得数组不太灵活 所以golang为我们提供了一种切片 var arr = [5]int{4, 5, 6, 7, 8} var slice = arr[0:5] // 切片的
go 切片
发布时间:2023-10-06 (2023-10-06)

使用数组的时候,会不会觉得数组不太灵活

所以golang为我们提供了一种切片

var arr = [5]int{4, 5, 6, 7, 8}
var slice = arr[0:5] // 切片的两边也是顾头不顾尾
fmt.Println(slice)

array[开始引用的index : 结束引用的index+1]

这里的slice是从arr中切片切出来的

:两边是顾头不顾尾(前闭后开)

左边不写默认是0

右边不写默认是最后一个

切片是对数组的引用

如果改变切片中的元素,对应的数组也会变化

var arr = [5]int{4, 5, 6, 7, 8}
var slice = arr[0:5]
slice[0] = 1
fmt.Println(arr)

指向切片的切片

var arr = [5]int{4, 5, 6, 7, 8}
var slice = arr[0:5]
var s1 = slice[0:2]

slice[0] = 1

fmt.Println(s1)
fmt.Println(slice)
fmt.Println(arr)

切片是引用类型,默认值为nil

var s []int
fmt.Println(s == nil)  // true

遍历方式同数组

分配内存空间

使用make

var s []int
s = make([]int, 3, 5) // 创建一个长度为3, 容量为5的空间
fmt.Println(s)        // [0 0 0]

容量不写,默认等于长度

查看长度和容量

len

cap

由系统自动创建底层数组

s := []int{1,2,3,4}

追加元素

s1 := []int{1,2,3,4}
s = append(s1, 5, 6, 7, 8) // 底层创建了新的数组,不在应用原数组

复制数组

// 复制
var s1 = make([]int, 8, 8)
copy(s1, s)  // 将s复制到s1,复制的个数就是s1的容量大小
fmt.Println(s1)

string与 []byte

str := "hello 世界"
fmt.Printf("[]byte(str)=%s\n", []byte(str))
fmt.Printf("[]byte(str)=%v\n", []byte(str))
// 汉字被分成了三个数字
for i, v := range str{
  fmt.Printf("str[%d]=%c\n", i, v)
}

函数参数接收多个值

package main

import "fmt"

func Sum(numList ...int) int {
  sum := 0
  for _, v := range numList {
    sum += v
  }
  return sum
}

func main() {
  sum := Sum(1, 3, 4, 5, 6)
  fmt.Println(sum)
}