[TOC]
>[success] ## **1:数组基本介绍:**
>[success] ### **1:Go 语言提供了数组类型的数据结构。**
1)数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。相对于去声明number0, number1, ..., and number99的变量,
2)使用数组形式numbers[0],numbers[1] ..., numbers\[99\]更加方便且易于扩展。数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。
![](https://img.kancloud.cn/14/00/1400d22459b8c3398153f8854feb15cd_1280x307.png)
>[success] ### **2:声明数组:**
1)数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法:
Var 数组变量名 【元素数量】T
![](https://img.kancloud.cn/11/d2/11d24f9a8f57a42bc4c53646b9f75f83_1280x466.png)
2)比如:var a [5]int, 数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。 [5]int和[10]int是不同的类型。
代码如下:
![](https://img.kancloud.cn/3f/ca/3fca19b3c5d31c30374bb54141ff3f12_1280x517.png)
![](https://img.kancloud.cn/65/51/65517eaf4a2214cf80e3e87f843cb3e8_1280x578.png)
>[success] ### **3:数组注意事项:**
数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1,访问越界(下标在合法范围之外),则触发访问越界,会panic。
>[success] ### **4:数组初始化**
**数组4种初始化方法:如下**
**第一种:**
![](https://img.kancloud.cn/7d/67/7d6703b4c7eec4af8b4005a080e4eb1b_1280x213.png)
**第二种:类型推导方式**
![](https://img.kancloud.cn/fb/f5/fbf507c459bef2d8d951966ddaf85918_1280x266.png)
**第三种:**
![](https://img.kancloud.cn/ac/de/acdedb16f60b3b8a165d01e5618911d9_1280x280.png)
**第四种:根据下标来指定(赋)值**
![](https://img.kancloud.cn/b4/e6/b4e6d11a19c4504b3796e0f753e13a14_1280x297.png)
**其他使用方法:类型推导**
![](https://img.kancloud.cn/c5/72/c572aaf22814801e24dede50db1bc1c9_1280x210.png)
>[success] ### **5:访问数组**
**方式1:**
要求:将控制台输入5个成绩保存到数组,float64类型
![](https://img.kancloud.cn/3b/55/3b550c27a485c17ab45f8ce2be637aff_1280x555.png)
**结果如图:**
![](https://img.kancloud.cn/7c/27/7c2736067807509ecf5c614abb0cdda1_1280x665.png)
**方式2:**
**for-range**
这是go语言一种独有的结构,可以用来遍历访问,数组的元素
基本语法:
Array01是要遍历的数组变量名
for index,value := range array01{
........
}
说明:
1)第一个返回值index是数组的下标
2)第二个value是在该下标位置的值
3)他们都是仅在for循环内部可见的局部变量
4)遍历数组元素的时候,如果不想使用下标index,可以直接把下标index标为下划线\_
5)index 和value的名称不是固定的,即程序员可以自行指定,一般命名为index和value
图下是类型推倒
![](https://img.kancloud.cn/d8/93/d893690d62660d836c00fb5a7cdc14b1_1280x500.png)
![](https://img.kancloud.cn/1a/3b/1a3b06912d988c371db5488f3e7c171f_1280x411.png)
如果只要值,忽略下标,操作如下:
![](https://img.kancloud.cn/4e/61/4e6179975224243f5b9197ba1d214154_1280x444.png)
>[success] ## **6:数组细节**
1)数组 是多个相同类型数据的组合,一个数组一旦声明定义了,其长度是固定的,不能动态变化。
2)var arr [int这时arr就是一个slice切片,切片后面专门讲解,不急哈.
3)数组 中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用。
4)数组创建后,如果没有赋值,有默认值
数值类型数组:默认值为0
字符串数组:默认值为
bool数组:默认值为false
5)使用数组的步骤1.声明数组并开辟空间2给数组各个元素赋值3使用数组
6)数组的 下标是从0开始的。
7)数组 下标必须在指定范围内使用,否则报panic,数组越界,比如
var arr [5]int则有效下标为0-4
8)Go的数组属值类型, 在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响
![](https://img.kancloud.cn/56/08/5608a6b448003113c23cacf7676073d0_1276x720.png)
9)如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式) [先体验下,画示意图]
![](https://img.kancloud.cn/bb/8d/bb8de36c783cef01a11363df3846081b_1280x544.png)
10)长度是数组类型的一部分,在传递函数参数时需要考虑数组的长度,看下面案例:
![](https://img.kancloud.cn/e6/63/e663e30660fdcfb27cb542eadaaf3cf7_1280x407.png)
**解答:**
第一题:编译错误,因为,【】int是切片
第二题:编译错误,因为,【4】int和main函数里面的【...】{1,2,3},不是一个类型
第三题:编译通过
>[success] ## **7:数组应用案例**
1)创建一一个byte类型的26个元素的数组,分别放置'A-Z‘。使用for 循环访问所有元素并打印出来。提示:字符数据运算'A'+1 > 'B'
![](https://img.kancloud.cn/36/29/36290cff591053d66d3570c092f6234f_1280x558.png)
2)请求出一个数组的最大值,并得到对应的下标。
![](https://img.kancloud.cn/6e/2f/6e2fbae0a6c3465002bb259efd7bb9f8_1223x720.png)
3)请求出一个数组的和,和平均值。for -range
![](https://img.kancloud.cn/c9/96/c996130ee353a42407d2af4af7fda203_1280x414.png)
4)随机生成5个数,并将其反转打印
![](https://img.kancloud.cn/e4/08/e408707d3e374c1b0a7f67501b0e2360_742x720.png)
- Golang语言之旅
- 第一章:初始小节以及安装
- 一:Golang语言特性
- 二:Windows上安装Go语言开发包
- 三:在Mac OS上安装Go语言开发包
- 第二章:GO语言注意事项
- 一:Dos的常用指令
- 第三章:Go初识小菜
- 一:Go语言之变量与常量
- 二:Go内置值-引用类型
- 三:基本的数据类型
- 四:字符串(char)
- 五:布尔类型(bool)
- 六:字符串类型(string)
- 七:基本数据类型的默认值
- 八:基本数据类型的互相转换
- 九:基本数据类型和string类型的相互转换
- 十:Golang指针
- 十一:值类型和引用类型
- 十二:标识符和命名规范
- 十三:系统保留关键字and预定义标识符
- 十四:fmt常用方法解析
- 第四章:Go运算符
- 一:运算符的基本介绍
- 二:算术运算符
- 2.1:算数运算符细节
- 三:关系运算符
- 3.1:关系运算符细节
- 四:逻辑运算符
- 4.1:逻辑运算符细节及案例
- 五:Go赋值运算符
- 5.1:案例演示赋值运算符的基本使用
- 5.2:赋值运算符的特点
- 六:Go位运算符
- 七:其他运算符
- 八:运算符的优先级
- 九:控制台输入语句
- 十:进制
- 十一:位运算
- 第五章:流程控制大纲
- 一:if语句
- 二:switch语句
- 三:for循环
- 第六章:函数-包-错误处理
- 一:Go函数
- 二:Go包
- 三:匿名函数
- 四:闭包
- 五:函数defer
- 六:函数参数的传递方式
- 七:变量的作用域
- 八:时间和日期相关函数
- 九:new和recover异常
- 十:数组(Array)切片(Section)
- 十一:切片(slice)
- 十二:3 数组的排序和查找
- 第七章:Map
- 第一节:Map基础认识
- 第二节:Map初始化和make
- 第三节:Map增删改查
- 第四节:Map的切片
- 第五节:Map的注意事项
- 第八章:面向对象(上)
- 第一节:结构体(值类型)
- 第二节:方法
- 第三节:面向对象编程应用实例
- 第九章:面向对象(下)
- 第一节:面向对象之抽象
- 第二节:面向对象之继承
- 第三节:面向对象之多态
- 第四节:接口
- 第十章:文件操作
- 第一节:文件基本介绍
- 第二季:写文件实例操作
- 第三节:JSON
- 第十一章:单元测试
- 第一节:单元测试介绍
- 第二节:单元测试案例
- 第三节:单元测试总结
- 第四节:单元测试案例
- 第十二章:goroutine和channel
- 第一节:goroutine基本介绍
- 第二节:goroutine入门案例
- 第三节:goroutione调度模型
- 第四节:Golang设置运行的CPU数量
- 第十二章:channel
- 第一节:channel基本介绍
- 第二节:channel基本使用
- 第三节:channel案例演示
- 第四节:channel 使用的注意事项
- 第五节:channel练习题
- 第六节:channel的遍历和关闭
- 第七节:goroutione和channel结合
- 第八节:channel细节处理
- 第十二章:并发模式
- 第十三章:反射reflect
- 第一节:反射基本介绍
- 第二节:反射重要的函数和概念
- 第三节:反射快速入门案例
- 第四节:反射注意事项
- 第五节:反射练习题
- 第六节:反射最佳实践