1.数组
数组不用多说,和C++、JAVA等语言的数组是差不多的。我就不多说了,下面是数组在golang中的基本操作吧!
数组有3种创建方式:
[length]Type 、[N]Type{value1, value2, … , valueN}、[…]Type{value1, value2, … , valueN}
- 全局或者本地都可以声明
package main
import "fmt"
var arr1 = [6]int{1, 2, 3, 5} //声明的同时赋值
var arr2 [5]int //先声明,后赋值
var arr3 = []int{1, 2, 3, 5} //不指明数组的长度
var arr4 = [...]int{1, 2, 3, 5} //用...(三个点,多一个不行,少一个也不行)代替数组的长度
func main() {
fmt.Println("*************************")
for i, x := range arr1 {
fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
}
fmt.Println("*************************")
arr2[2] = 8 //赋值
for i, x := range arr2 {
fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
}
fmt.Println("*************************")
for i, x := range arr3 {
fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
}
fmt.Println("*************************")
for i, x := range arr4 {
fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
}
}
- 局部,不使用var
package main
import "fmt"
func main() {
arr1 := [6]int{1, 2, 3, 5} //声明的同时赋值
fmt.Println("*************************")
for i, x := range arr1 {
fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
}
fmt.Println("*************************")
}
值得注意 !的是这种数组的声明方式是不可以用在全局数组的声明的,否则编译器会报错误
2.切片
切片有四种声明方式
1)make ( []Type ,length, capacity )
2) make ( []Type, length)
3) []Type{}
4) []Type{value1 , value2 , … , valueN }
package main
import "fmt"
func main() {
slice1 := make([]int, 5, 8)
slice2 := make([]int, 9)
slice3 := []int{}
slice4 := []int{1, 2, 3, 4, 5}
fmt.Println(slice1)
fmt.Println(slice2)
fmt.Println(slice3)
fmt.Println(slice4)
}
- 切片(slice)是一个引用类型,他总是指向一个底层数组。
- 切片的声明可以像数组一样,但是不需要长度。
- 切片可以从一个数组或者一个已经存在切片中再次声明。
package main
import "fmt"
func main() {
// 声明一个数组
var array = []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"}
// 声明两个slice
var aSlice, bSlice []string
// 演示一些简便操作
//aSlice = array[:3] // 等价于aSlice = array[0:3] aSlice包含元素: a,b,c
aSlice = array[5:] // 等价于aSlice = array[5:10] aSlice包含元素: f,g,h,i,j
//aSlice = array[:] // 等价于aSlice = array[0:10] 这样aSlice包含了全部的元素
// 从slice中获取slice
//aSlice = array[3:7] // aSlice包含元素: d,e,f,g,len=4,cap=7
//bSlice = aSlice[1:3] // bSlice 包含aSlice[1], aSlice[2] 也就是含有: e,f
//bSlice = aSlice[:3] // bSlice 包含 aSlice[0], aSlice[1], aSlice[2] 也就是含有: d,e,f
bSlice = aSlice[0:5] // 对slice的slice可以在cap范围内扩展,此时bSlice包含:d,e,f,g,h
//bSlice = aSlice[:] // bSlice包含所有aSlice的元素: d,e,f,g
fmt.Println("*************************")
for i := 0; i < len(aSlice); i++ {
fmt.Print(aSlice[i])
}
fmt.Println("\n*************************\n")
for i := 0; i < len(bSlice); i++ {
fmt.Print(bSlice[i])
}
fmt.Println("\n*************************\n")
}