7

Go基础篇之数组 - Go语言中文网 - Golang中文社区

 1 year ago
source link: https://studygolang.com/articles/36009
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Go基础篇之数组

webff · 45分钟之前 · 90 次点击 · 预计阅读时间 3 分钟 · 大约8小时之前 开始浏览    

数组相必大家都很熟悉,各大语言也都有数组的身影。Go 语言也提供了数组类型的数据结构。

1. Array(数组)

数组是同一种数据类型的固定长度的元素集合。在 Go 语言中,数组声明后长度就不能改变了,可以修改数组的元素,用法:

// eg: 定义一个长度为 10 的 int 数组
var a [10]int

2. 声明数组

Go 语言数组申明时需要指定元素类型及元素的个数,语法格式如下:

var variable_name [SIZE] variable_type

3. 数组初始化

Go 语言中初始化数组有很多方式。

3.1 方式一

我们也可以通过字面量在声明数组的同时快速初始化数组:

balance := [5]float32{3.14, 13.0, 33.4, 15.0, 20.0}

3.2 方式二

如果数组长度不确定,可以使用 ...代替数组的长度,编译器会根据元素个数自行推断数组的长度:

balance := [...]float32{3.14, 13.0, 33.4, 15.0, 20.0}

3.3 方式三

如果设置了数组的长度,我们还可以通过指定下标来初始化元素:

//  将索引下标为 1 和 3 的元素初始化
balance := [5]float32{1:2.0,3:7.0}

3.4 多维数组

package main

import (
    "fmt"
)

var array1 [5][3]int
var array2 [2][3]int = [...][3]int{{10, 20, 30}, {4, 5, 6}}

func main() {
    arr1 := [2][3]int{{10, 11, 12}, {20, 21, 22}}
    arr2 := [...][2]int{{10, 11}, {20, 21}, {30, 31}}
    fmt.Println(array1, array2)
    fmt.Println(arr1, arr2)
}

注意: Go 语言多维数组中,只有第一层可以用 ...其他维度不能用 ...

4. 遍历数组&取值

Go 语言中,遍历数组有以下两种方法:

func main() {
    var users = [...]string{"张三", "李四", "王五"}

    // 方法1:for range遍历
    for index, item := range users {
        fmt.Println(index, item)
    }

    // 方法2:for循环遍历
    for i := 0; i < len(users); i++ {
        fmt.Println("姓名:", users[i])
    }

}

多维数组遍历

func main() {
    var f [2][3]int = [...][3]int{{10, 20, 30}, {4, 5, 6}}

    for k1, v1 := range f {
        for k2, v2 := range v1 {
            fmt.Printf("(%d,%d)=%d ", k1, k2, v2)
        }
        fmt.Println("-------------")
    }
}

注意: Go 语言中访问越界,如果下标在数组合法范围之外,则触发访问越界,会出现 panic

5. 数组拷贝和传参

Go 语言中数组是值类型,赋值和传参会复制整个数组。只会改变复制出来临时数组的值,不会改变本身。

package main

import "fmt"

func printArr1(arr *[5]int) {
    // 数组指针
    arr[0] = 1000
}

func printArr2(arr [5]int) {
    arr[0] = 1000
}

func main() {
    arr1 := [5]int{100, 200, 300, 400, 500}
    printArr1(&arr1)
    fmt.Println(arr1)

    arr2 := [...]int{2, 4, 6, 8, 10}
    printArr2(arr2)
    fmt.Println(arr2)
}

控制台输出结果:

[1000 200 300 400 500]
[2 4 6 8 10]

注意:

  • 数组支持 “==“、”!=” 操作符,因为其内存总是被初始化过的。
  • [n]T 表示指针数组,[n]T 表示数组指针 。

好了,就到这,我是程序员祝融,欢迎关注、点赞,我们下期再见!

微信.png


有疑问加站长微信联系(非本文作者))

280

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK