视频来源:B站《golang入门到项目实战 [2022最新Go语言教程,没有废话,纯干货!]》
文章为自己整理的学习笔记,侵权即删,谢谢支持!
文章目录
一 Go语言中的数组
数组是相同数据类型的一组数据的集合,数组也是一种数据类型,在 Go 中,数组是值类型。
数组一旦定义长度不能修改,数组可以通过下标(或者叫索引)来访问元素。
数组的优点:
- 使用数组来解决问题,程序的可维护性增加
- 方法代码更加清晰,也容易扩展
1.1 go语言数组的定义
① 数组定义的语法
var variable_name [SIZE] variable_type
variable_name
:数组名称
SIZE
:数组长度,必须是常量
variable_type
:数组保存元素的类型
实例:
package main
import "fmt"
func main() {
var a [3]int // 定义一个int类型的数组a,长度是3
var s [2]string // 定义一个字符串类型的数组s,长度是2
fmt.Printf("a: %T\n", a)
fmt.Printf("s: %T\n", s)
}
运行结果:
a: [3]int
s: [2]string
从上面运行结果,我们可以看出,数组和长度和元素类型共同组成了数组的类型。
② 数组在内存布局(重点)
- 数组的地址可以通过数组名来获取
&intArr
- 数组的第一个元素的地址,就是数组的首地址
- 数组的各个元素的地址间隔是依据数组的类型决定,比如:
int64
-> 8;int32
->4…
package main
import (
"fmt"
)
func main() {
var inArr [3]int
fmt.Println(inArr)
inArr[0] = 10
inArr[1] = 10
inArr[2] = 10
fmt.Println(inArr)
fmt.Printf("inArr的地址为: %p\n inArr[0]的地址为:%p\n inArr[1]的地址为:%p\n inArr[2]的地址为:%p\n", &inArr, &inArr[0], &inArr[1], &inArr[2])
}
运行结果:
[0 0 0]
[10 10 10]
inArr的地址为: 0xc000010180
inArr[0]的地址为:0xc000010180
inArr[1]的地址为:0xc000010188
inArr[2]的地址为:0xc000010190
1.2 go语言数组的初始化
初始化就是给数组的元素赋值,没有初始化的数组,默认元素值都是零值,布尔类型是false
,字符串是空字符串。
① 没有初始化的数组
package main
import "fmt"
func main() {
var a [3]int // 定义一个int类型的数组a,长度是3
var s [2]string // 定义一个字符串类型的数组s,长度是2
var b [2]bool // 定义一个布尔类型的数组b,长度是2
fmt.Printf("a: %v\n", a)
fmt.Printf("s: %v\n", s)
fmt.Printf("b: %v\n", b)
}
运行结果:
a: [0 0 0]
s: [ ]
b: [false false]
② 使用初始化列表来初始化
package main
import "fmt"
func main() {
var a = [3]int{
1, 2} // 没有初始化的数组,默认元素值都是零值,布尔类型是false,字符串是空字符串
var s = [2]string{
"hello", "golang"}
var b = [2]bool{
true, false}
fmt.Printf("a: %v\n", a)
fmt.Printf("s: %v\n", s)
fmt.Printf("b: %v\n", b)
}
运行结果:
a: [1 2 0]
s: [hello golang]
b: [true false]
使用初始化列表,就是将值写在**大括号{}
**里面。
③ 省略数组长度来初始化
数组长度可以省略,使用...
代替,例如:
package main
import "fmt"
func main() {
var a = [...]int{
1, 2, 3}
var s = [...]string{
"hello", "golang"}
var b = [...]bool{
true, false}
fmt.Printf("a: %v\n", a)
fmt.Printf("s: %v\n", s)
fmt.Printf("b: %v\n", b)
}
运行结果:
a: [1 2 3]
s: [hello golang]
b: [true false]
④ 指定索引值的方式来初始化
package main
import "fmt"
func main() {
var a = [...]int{
0: 1, 2: 2} // 没有初始化的数组,默认元素值都是零值,布尔类型是false,字符串是空字符串
var s = [...]string{
1: "hello", 2: "golang"}
var b = [...]bool{
2: true, 5: false}
fmt.Printf("a: %v\n", a)
fmt.Printf("s: %v\n", s)
fmt.Printf("b: %v\n", b)
}
运行结果:
a: [1 0 2]
s: [ hello golang]
b: [false false true false false false]
二 Go语言中访问数组元素
可以通过下标的方式,来访问数组元素。
数组的最大下标为数组长度 -1 ,大于这个下标会发生数组越界。
2.1 访问数组元素
package main
import "fmt"
func main() {
var a [2]int
a[0] = 100
a[1] = 200
fmt.Printf("a[0]: %v\n", a[0])
fmt.Printf("a[0]: %v\n", a[1])
// 修改 a[0] a[1]
a