数组
Go数组声明需要指定元素类型以及元素个数,格式如下:
var variable_name [SIZE] variable_type
var values [10] int
Go使用大括号初始化数组中的元素,如果元素没有指定初始值,默认为零值。
func main() {
var values=[10] int{1,2,3,4}
println(values[0])//1
println(values[4])//0
}
如果数组有初始值,数组大小使用...代替,Go将会根据元素个数来设置数组大小。
func main() {
var values=[...] int{1,2,3,4}
println(len(values))//4
}
Go支持多维数组,格式如下:
var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
下面代码中的values是一个3行4列的二维数组,由3个长度为4的数组组成。
func main() {
var values=[3][4] int{
{0, 1, 2, 3} ,
{4, 5, 6, 7} ,
{8, 9, 10, 11},
}
println(values[1][2])//6
}
切片
Go 数组的长度不可改变,而切片的长度是不固定的,可以理解为动态数组,声明格式如下:
var identifier []type
切片默认值为nil,使用内置函数make创建切片,其中capacity为可选参数。
make([]type, length, capacity)
获取切片长度,容量:
func main() {
var values=[] int{1,2,3,4}
println(len(values))
println(cap(values))
}
使用内置函数append追加数据并返回新的切片。
func main() {
var values [] int
values=append(values,1)
values=append(values,2,3,4)
values=append(values,[]int{5,6,7}...)
println(len(values))
}
使用内置函数copy将一个切片的数据拷贝到另一个切片,拷贝的长度为这两个切片长度的最小值。
func main() {
var values1=[] int{1,2,3,4}
var values2=[] int{4,5}
copy(values1,values2)
fmt.Println(values1)//4,5,3,4
values1=[] int{1,2,3,4}
values2=[] int{4,5}
copy(values2,values1)
fmt.Println(values2)//1,2
}
可以通过设置下限及上限来截取切片 [lower-bound:upper-bound]。
func main() {
var values=[...] int{0,1,2,3,4,5,6,7,8}
//全部元素
fmt.Println(values[:])//[0 1 2 3 4 5 6 7 8]
//包含下限2,但不包含上限5
fmt.Println(values[2:5])//[2 3 4]
//默认下限为0
fmt.Println(values[:2])//[0 1]
//默认上限为len(values)
fmt.Println(values[3:])//[3 4 5 6 7 8]
}
有疑问加站长微信联系(非本文作者)