内容太多了。本次先更新数组。
数组的概念,其实和numpy有的一拼。基本上是array的操作。在单类型的数组中,软拷贝类似于python的概念。
package main
import ("fmt")
func main() {
//*数组*
//和numpy的概念很类似。其中,数组是一组数据类型一样的元素的集合。占用的内存是连续分配
//数组可以用下标来进行索引
//*初始化数组*
var arr [5]int //长度为5,的int类型数组,
fmt.Println(arr) //初始化后,每个元素都是0. //[0 0 0 0 0]
arr2 :=[5]int{10,20,30,40}
fmt.Println(arr2) //[10 20 30 40 0] 没有声明的元素,用0表示
//不声明长度的话,Go会自动填充长度。[...]表示
arr3 := [...]int{10,20,40,60,70}
fmt.Println(len(arr3)) //5
//还可以只声明某几个角标的元素
arr4 := [5]int{2:10,4:25}
fmt.Println(arr4) //[0 0 10 0 25]
//*使用数组*
arr5 := [...]int{10,20,30,40,50}
fmt.Println(arr5[3])
//修改元素
arr5[4] = 60
fmt.Println(arr5) //[10 20 30 40 60]
//*指针数组*
//其实就是指针的数组。声明一个所有元素都是“指针”的数组。使用*就可以访问元素指针所指向的值
// 声明包含 5 个元素的指向整数的数组
// 用整型指针初始化索引为 0 和 1 的数组元素
arr6 :=[5]*int{0:new(int),1:new(int)}
*arr6[0] =10
*arr6[1] =20
fmt.Println(arr6) // [0xc00000a0b8 0xc00000a0e0 <nil> <nil> <nil>]
//可以看到 0xc00000a0b8 和 0xc00000a0e0 并不是10和20,这是内存中的地址指针。定义过后的地址指针是由内存中的地址的,而没有定义的,则是空nil
// 如何看到内存地址为0xc00000a0b8和0xc00000a0e0所指向的值是什么呢?
fmt.Println(*arr6[1]) //20
//*赋值操作*
//赋值有2中方法:第一种是 arr1= arr2,第二种是 arr1= copy arr2
//第一种方法中,只有相同的地方才能全部赋值
arr7 := [4]string{}
arr8 := [...]string{"red","blue","green","yellow"}
arr7 = arr8
fmt.Println(arr7)
//在没有声明arr7的长度时,arr7 := []string{},或者arr7和arr8的长度不一致时,赋值操作会报错:cannot use arr8 (type [4]string) as type []string in assignment
//因此要修改arr7 :=[4]string{}
//指针数组赋值给另一个
// 声明第一个包含 3 个元素的指向字符串的指针数组
arr9 := [3]*string{}
arr10 :=[3]*string{new(string),new(string),new(string)}
*arr10[0]= "red"
*arr10[1]= "blue"
*arr10[2]= "green"
arr9 = arr10
fmt.Println(arr9) //[0xc00003c1f0 0xc00003c200 0xc00003c210]
fmt.Println(arr10) //[0xc00003c1f0 0xc00003c200 0xc00003c210]
fmt.Println(*arr9[2])
//*多维数组*
arra1 :=[3][4]int{} //3行4列
fmt.Println(arra1) //[[0 0 0 0] [0 0 0 0] [0 0 0 0]]
arra2 := [4][2]int{1: {0: 20}, 3: {1: 41}}
fmt.Println(arra2) //[[0 0] [20 0] [0 0] [0 41]]
}
输出结果
"C:\Program Files\JetBrains\GoLand 2020.1.3\go1.15.6\go\bin\go.exe" build -o
[0 0 0 0 0]
[10 20 30 40 0]
5
[0 0 10 0 25]
40
[10 20 30 40 60]
[0xc00000a0b8 0xc00000a0e0 <nil> <nil> <nil>]
20
[red blue green yellow]
[0xc00003c1f0 0xc00003c200 0xc00003c210]
[0xc00003c1f0 0xc00003c200 0xc00003c210]
green
[[0 0 0 0] [0 0 0 0] [0 0 0 0]]
[[0 0] [20 0] [0 0] [0 41]]