Go基础篇之数组

webff · · 1635 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

数组相必大家都很熟悉,各大语言也都有数组的身影。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](https://static.golangjob.cn/221209/6b82ffc1bbb877d55631b73171f3534b.png)

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

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

1635 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传