1、数组

Go 语⾔提供了数组类型的数据结构。

数组是具有相同唯⼀类型的⼀组已编号且⻓度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符 串或者⾃定义类型。

数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第⼀个元素索引为 0,第⼆个索引为 1,以 此类推。

go语言怎么读文件存入二维数组 go语言二维数组切片_开发语言

1.1、数组的定义

= 是赋值, := 是声明变量并赋值

go语言怎么读文件存入二维数组 go语言二维数组切片_go语言怎么读文件存入二维数组_02

1.2、数值取值

go语言怎么读文件存入二维数组 go语言二维数组切片_开发语言_03

1.3、二维数组

go语言怎么读文件存入二维数组 go语言二维数组切片_go语言怎么读文件存入二维数组_04

2.Go语言切片(slice)

Go 语⾔切⽚是对数组的抽象。

Go 数组的⻓度不可改变,在特定场景中这样的集合就不太适⽤,Go 中提供了⼀种灵活,功能强悍的内置类型切⽚ ("动态数组"),与数组相⽐切⽚的⻓度是不固定的,可以追加元素,在追加时可能使切⽚的容量增⼤

切片中的概念:

  • len:长度
  • cap:容量

2.1、定义切片

go语言怎么读文件存入二维数组 go语言二维数组切片_go语言怎么读文件存入二维数组_05

[root@nginx-kafaka03 08-06]# cat test.go 
package main

import "fmt"

func main() {
	var slice1 []int
    fmt.Println(slice1)
    var slice2 []int = make([]int,5)
    fmt.Println(slice2)
    slice3 := make([]int,5)
    fmt.Println(slice3)
	
}
[root@nginx-kafaka03 08-06]# go run test.go 
[]
[0 0 0 0 0]
[0 0 0 0 0]

2.2、切片初始化

go语言怎么读文件存入二维数组 go语言二维数组切片_后端_06

[root@nginx-kafaka03 08-06]# cat test.go 
package main

import "fmt"

func main() {
	s := [] int{1,2,3}
	s1 := s[0:2]
	fmt.Println(s,s1)
}
[root@nginx-kafaka03 08-06]# go run test.go 
[1 2 3] [1 2]

2.3、len()和cap()函数

切⽚是可索引的,并且可以由 len() ⽅法获取⻓度。

切⽚提供了计算容量的⽅法 cap() 可以测量切⽚最⻓可以达到多少。

以下为具体实例:

go语言怎么读文件存入二维数组 go语言二维数组切片_golang_07

2.4、切片截取

可以通过设置下限及上限来设置截取切⽚ [lower-bound:upper-bound],实例如下:

go语言怎么读文件存入二维数组 go语言二维数组切片_数组_08

go语言怎么读文件存入二维数组 go语言二维数组切片_go语言怎么读文件存入二维数组_09

2.5、append()函数和copy()函数

如果想增加切⽚的容量,我们必须创建⼀个新的更⼤的切⽚并把原分⽚的内容都拷⻉过来。

下⾯的代码描述了从拷⻉切⽚的 copy ⽅法和向切⽚追加新元素的 append ⽅法。

go语言怎么读文件存入二维数组 go语言二维数组切片_开发语言_10

 

go语言怎么读文件存入二维数组 go语言二维数组切片_数组_11

看变量地址

go语言怎么读文件存入二维数组 go语言二维数组切片_数组_12

 

go语言怎么读文件存入二维数组 go语言二维数组切片_golang_13

数组和切片的区别:

go语言怎么读文件存入二维数组 go语言二维数组切片_开发语言_14

3、数组与切片

3.1 数组的容量和⻓度

数组的容量和⻓度是⼀样的。cap() 函数和 len() 函数均输出数组的容量(即⻓度)

3.2 类型

数组是 值类型 ,将⼀个数组赋值给另⼀个数组时,传递的是⼀份拷⻉。

切⽚是 引⽤类型 ,切⽚包装的数组称为该切⽚的底层数组。看下⾯的例⼦:

 注意数组是⼀个固定⻓度的,初始化时候必须要指定⻓度,不指定⻓度的话就是切⽚了

go语言怎么读文件存入二维数组 go语言二维数组切片_后端_15

3.3、隐藏数组

 Go的切⽚是在数组之上的抽象数据类型,所以创建的切⽚始终都有⼀个数组存在。 举例说明:

go语言怎么读文件存入二维数组 go语言二维数组切片_开发语言_16

[a b c d e] [c d] [a b c]
[a b 8 d e] [8 d] [a b 8]

 数组与切⽚的赋值形式

go语言怎么读文件存入二维数组 go语言二维数组切片_后端_17

 

go语言怎么读文件存入二维数组 go语言二维数组切片_后端_18

从这个例⼦中可以看出,数组的赋值是值的拷⻉,是⼀个全新的数组。⽽切⽚的赋值是引⽤。下⾯再来看⼀个例⼦。

go语言怎么读文件存入二维数组 go语言二维数组切片_go语言怎么读文件存入二维数组_19

 这个例⼦再⼀次说明:数组是赋值是copy,⽽切⽚仅是引⽤。例⼦1和例⼦2中的切⽚的声明⽤到了隐藏数组。再 来看下例⼦3,使⽤⾮隐藏数组的情况。

go语言怎么读文件存入二维数组 go语言二维数组切片_go语言怎么读文件存入二维数组_20

 

go语言怎么读文件存入二维数组 go语言二维数组切片_go语言怎么读文件存入二维数组_21

 

go语言怎么读文件存入二维数组 go语言二维数组切片_go语言怎么读文件存入二维数组_22

 数组作为参数,被函数调⽤

go语言怎么读文件存入二维数组 go语言二维数组切片_golang_23

 切⽚被调⽤时,直接传递引⽤

go语言怎么读文件存入二维数组 go语言二维数组切片_golang_24