一:数组
数组是一个具有相同类型元素,固定长度的有序集合,一般定义如下:
var x [5]int
表示数组是一个整数型数组,长度为5
数组的几种定义方式
a: var来定义数组,然后依次赋值
package main
import "fmt"
func main() {
var x []int
x[] =
x[] =
x[] =
x[] =
var sum int
for _, elem := range x {
sum += elem
}
fmt.Println(sum)
/**
我们用range这个go语言内置的方法来遍历数组,其实range也可以用在切片和字典上面
当你对一个返回值不感兴趣时候,可以用下划线 _ 来忽略这个值
**/
}
b: 第二种定义方法
package main import "fmt"
func main() {
var x = []int{, , }
x[] =
var sum int
for _, i := range x {
sum += i
}
fmt.Println(sum)
}
c: 第三种定义
//如果我们不能显示知道数组长度,也可以用 ... 来代替长度
func main() {
var x = [...]string{
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday", // 这里最后如果没有逗号,那么西面的大括号{要紧挨这个Friday,注意
}
for _, day := range x {
fmt.Println(day)
}
}
二:切片
上面数组是有固定长度的有序集合,也就是说一段数组长度定义了,你也无法向里面添加元素了。
当元素个数不确定时候,我们又想添加元素进去,这时候数组就不合适了,这时候切片slice登场了
切片和数组类似,切片有一个优点,那就是切片长度是可变的
a: make定义切片
package main
import "fmt"
func main() {
var arr1 = make([]int, )
fmt.Println("Capcity:", cap(arr1), "Length:", len(arr1))
var arr2 = make([]int, , )
fmt.Println("Captity:", cap(arr2), "Length:", len(arr2))
for i := ; i < len(arr1); i++ {
arr1[i] = i
}
fmt.Println(arr1)
for i := ; i < len(arr2); i++ {
arr2[i] = i
}
fmt.Println(arr2)
}
用make定义切片
1:只指定长度,这个时候切片的容量和长度相同
2:另外一种同时指定切片的容量和长度
b: 用数组定义切片
package main
import "fmt"
func main() {
var arr1 = []int{, , , }
var s1 = arr1[:]
var s2 = arr1[:]
var s3 = arr1[:]
fmt.Println(s1, s2, s3)
}
c: append给切片追加元素
package main
import "fmt"
func main() {
var arr1 = make([]int, , )
for i := ; i < len(arr1); i++ {
arr1[i] = i
}
arr1 = append(arr1, , , , )
fmt.Println("Capacity: ", cap(arr1), "Length:", len(arr1))
fmt.Println(arr1)
}
三:字典
字典是一个无序的,键值对的集合
a: 第一种定义:
package main
import "fmt"
func main() {
var x = map[string]string{
"A": "apple",
"B": "banana",
"O": "orange",
"P": "pear",
}
for key, val := range x {
fmt.Println("key:", key, "val:", val)
}
}
b: 第二种make定义
package main
import "fmt"
func main() {
var x map[string]string
x = make(map[string]string)
//上面的2行还可以合成一行 x:=make(map[string]string)
x["A"] = "apple"
x["B"] = "banana"
x["O"] = "orange"
x["P"] = "pear"
for key, val := range x {
fmt.Println("key:", key, "val:", val)
}
}