胖蔡说技术
随便扯扯

Go 数组

数组的声明

声明语法

var 数组的变量名 [元素数量]Type

var  arr0 [3]string    

只声明类型,不赋初值,编译器会给数组默认赋上零值

func main() {
    var a [4]int
    fmt.Println(a)    // [0, 0, 0, 0]
}

Go语言中的数组是一种值类型,所以还可以通过new() 来创建

var arr1 = new([3]string) 

两种方式的区别:

arr0 的类型是 [5]string, arr1 的类型是 *[5]string

数组越界

func main() {
    var a = [3]int{1, 2, 3}
    a[3] = 3      // 越界,数组定义只有三个3元素,数组下标是从 0 开始

    fmt.Println(a)

在Go中我们可以使用len() 获取到数组的长度

数组的赋值

因为数组是值拷贝,所以当把一个数组赋值给另一个时,在赋值修改后不会影响

func main() {
   var arr1 = [2]int{1, 2}
   var arr2 = new([2]int)

   arr1 = *arr2
   arr1[1] = 2
    
   fmt.Println(arr1)     //  [0 2]
   fmt.Println(arr2)     //  &[0 0]

   arr2[1] = 3

   fmt.Println(arr1)     // [0 2]
   fmt.Println(arr2)     // &[0 3]
}

想要修改原数组必须通过&操作符以引用的方式

func main() {
   var arr1 = [2]int{1, 2}
   var arr2 = new([2]int)

   arr2 = &arr1
   arr2[1] = 3
    
   fmt.Println(arr1)     // [0 3]
   fmt.Println(arr2)     // &[0 3]
}

如果数组的长度不同赋值会有什么结果呢

func main() {
    var a = [5]int{1,2,3,4,5}
    var b  [6]int

    b = a 
    fmt.Println(b)
    
}

运行结果:  cannot use a (type [5]int) as type [6]int in assignment  

数组的遍历

func main() {
    var arr = [5]string{"a", "b", "c", "d", "e"}

    for index, value := range arr {
        fmt.Println(index, value)
    }
}
--------------------------
0 a
1 b
2 c
3 d
4 e

小结

1 . 数组使用时要注意越界

2 . Go 语言中的数组是定长的,长度定义好后就不能再更改了。因为数组的长度是类型的一部分,限制了其灵活性([3]string 和 [4]string 是不同类型), 所以在Go中使用的很少

赞(0) 打赏
转载请附上原文出处链接:胖蔡说技术 » Go 数组
分享到: 更多 (0)

请小编喝杯咖啡~

支付宝扫一扫打赏

微信扫一扫打赏