数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数组。
方式一:(先声明 再赋值)
var numbers [3]int // 内存开辟3个内存空间,内存初始化的值为0
// 赋值
numbers[0] = 1
numbers[1] = 2
numbers[2] = 3
fmt.Println(numbers)
// 输出的结果为:[1 2 3]
方式二:(声明并直接初始化数组)
var languages = [2]string{"chinese", "english"}
fmt.Println(languages)
// 输出的结果为:[chinese english]
方式三:(声明并直接初始化数组并制定初始化指定位置)
girlfriends := [4]string{1: "taylor swift", 2: "三上悠亚", 3: "明里紬"}
fmt.Println(girlfriends)
// 输出的结果为:[ taylor swift 三上悠亚 明里紬]
方式四:(省略个数)
score := [...]int{80, 90, 100}
fmt.Println(score)
// 输出的结果为:[80 90 100]
声明 指针类型的数组。不会开辟内存初始化数值中的值 默认=nil
var poker *[3]int
fmt.Println(poker)
// 输出的结果为:<nil>
声明数组并初始化,返回的是指针类型的数组
a := new([3]int)
fmt.Println(a)
// 输出的结果为:&[0 0 0]
// 数组的内存是连续的;
fmt.Printf("girlfriends的内存地址为:%p \n", &girlfriends)
// 输出的结果为:girlfriends的内存地址为:0xc0000b0040
fmt.Printf("girlfriends的第一个元素的内存地址为:%p \n", &girlfriends[0])
fmt.Printf("girlfriends的第二个元素的内存地址为:%p \n", &girlfriends[1])
fmt.Printf("girlfriends的第三个元素的内存地址为:%p \n", &girlfriends[2])
/*
输出的结果为:
girlfriends的第一个元素的内存地址为:0xc0000b0040
girlfriends的第二个元素的内存地址为:0xc0000b0050
girlfriends的第三个元素的内存地址为:0xc0000b0060
*/
可变, 数组的元素可被更改(但长度和类型不可修改)
games := [3]string{"英雄联盟", "赛博朋克2077", "健身环大冒险"}
fmt.Println(games[2])
games[2] = "动物森友会"
fmt.Println(games[2])
/*
输出的结果:
健身环大冒险
动物森友会
*/
拷贝,变量赋值时重新拷贝一份(类似于Python深拷贝?)
allGames := games
games[2] = "健身环大毛线"
fmt.Println(games)
fmt.Printf("games的内存地址为:%p \n", &games)
fmt.Println(allGames)
fmt.Printf("allGames的内存地址为:%p \n", &allGames)
/*
输出的结果:
[英雄联盟 赛博朋克2077 健身环大毛线]
games的内存地址为:0xc0000901b0
[英雄联盟 赛博朋克2077 动物森友会]
allGames的内存地址为:0xc0000901e0
*/
长度
girlfriends := [4]string{"null", 1: "taylor swift", 2: "三上悠亚", 3: "明里紬"}
fmt.Println(len(girlfriends))
// 输出的结果为:4
索引
fmt.Println(girlfriends[0])
fmt.Println(girlfriends[1])
fmt.Println(girlfriends[2])
/*
输出的结果为:
null
taylor swift
三上悠亚
*/
切片
fmt.Println(girlfriends[0:2])
// 输出的结果为:[null taylor swift]
循环
// 手动循环
for i := 0; i < len(girlfriends); i++ {
fmt.Println(i, girlfriends[i])
}
/*
输出的结果为:
0 null
1 taylor swift
2 三上悠亚
3 明里紬
*/
// for range
for index, item := range girlfriends {
fmt.Println(index, item)
}
/*
输出的结果为:
0 null
1 taylor swift
2 三上悠亚
3 明里紬
*/
// 如果只有一个变量 那么只返回索引
for index := range girlfriends {
fmt.Println(index)
}
/*
输出的结果为:
0
1
2
3
*/
// 如果只需要结果,只需要用匿名变量接收index
for _, item := range girlfriends {
fmt.Println(item)
}
/*
输出的结果为:
null
taylor swift
三上悠亚
明里紬
*/
声明一个多维数组
方式一:
var nestData1 [2][3]int // [[0,0,0],[0,0,0]]
var nestData2 [2][2][3]int // [ [ [0,0,0],[0,0,0] ] , [ [0,0,0 ] , [ 0,0,0 ] ] ]
nestData1[0] = [3]int{1, 2, 3}
nestData1[1] = [3]int{1: 5}
nestData1[1][0] = 4
fmt.Println(nestData1)
// 输出的结果为:[[1 2 3] [4 5 0]]
方式二
Data := [2][3]int {[3]int{11,22,33}, [3]int{1:44}}
fmt.Println(Data)
// 输出的结果为:[[11 22 33] [0 44 0]]
基于Nginx+Supervisord+uWSGI+Django1.11.1+Python3.6.5构建