GO学习第三天(切片)

    xiaoxiao2025-05-17  3

    指针

    func swap(a, b *int) { *a, *b = *b, *a }

    函数只有值传递,没有引用

    交换值

    func main() { a, b := 3, 4 a, b = swap(a, b) fmt.Println(a, b) } func swap(a, b int) (int,int){ return b,a }

    数组定义

    func main() { var arr1 [3]int arr2 := [3]int{1, 2, 3} arr3 := [...]int{1, 2, 3} fmt.Println(arr1, arr2, arr3) }

    := 必须有初始值

    遍历数组

    func traversalArr() { arr4 := [...]int{1, 2, 3, 4, 5} for i := 0; i < len(arr4); i++ { fmt.Println(arr4[i]) } }

    利用range获得数组下标

    arr5 := [...]int{1, 2, 3, 4, 5} for i := range arr5 { fmt.Println(arr5[i]) }

    利用range直接获得数组元素

    for _, v := range arr5 { fmt.Println(v) }

    数组是值类型

    func printArr(arr [3]int) { for _, v := range arr { fmt.Println(v) } } 在形参时,会拷贝一份。[3]int, [5]int是不同的类型在GO语言中一般不直接使用数组

    切片定义

    func main() { arr := [...]int{0, 1, 2, 3, 4, 5, 6} fmt.Println("arr[1:5]:", arr[1:5]) fmt.Println("arr[:5]:", arr[:5]) fmt.Println("arr[1:]:", arr[1:]) fmt.Println("arr[:]:", arr[:]) }

    切片是数组的视图

    func updateArr(arr []int) { arr[0] = 100 } func main() { arr := [...]int{0, 1, 2, 3, 4, 5, 6} fmt.Println(arr) updateArr(arr[:]) fmt.Println("After arr:") fmt.Println(arr) }

    切片本身是没有数据的,是对数组的一个view

    Slice扩展

    arr := [...]int{0, 1, 2, 3, 4, 5, 6} s1 := arr[2:4] s2 := s1[1:3] fmt.Printf("s1= %v,len(s1)= %d,cap(s1)= %d\n", s1, len(s1), cap(s1)) fmt.Printf("s2= %v,len(s2)= %d,cap(s2)= %d", s2, len(s2), cap(s2)) Slice 可以向后扩展,不可以向前扩展s[i]不可以超过len(s),向后扩展不可以超过底层数组cap(s)
    最新回复(0)