这一篇主要是对循环语句和数组的介绍:
循环语句
在go中,只有for循环,没有while有关的循环,一般的比如:
for i := 0; i <= 10; i++ {
sum += i
}
如果 实现类似while的条件判断循环的功能,可以用:
for condition { }
比如:
for sum<0 {
sum++ // 无限循环下去
}
此外,还有类似python 中迭代器计数 enumerate 功能,如下:
numbers := [6]int{1, 2, 3, 5}
for i,x:= range numbers {
fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
}
输出为:
第 0 位 x 的值 = 1 第 1 位 x 的值 = 2 第 2 位 x 的值 = 3 第 3 位 x 的值 = 5 第 4 位 x 的值 = 0 第 5 位 x 的值 = 0
数组
我们都知道,有静态数组和动态数组,在go中动态数组一般用切片(slice)实现
对于静态数组,定义形式如下:
var arr[10] float32 //一维数组
var arr2[10][10] float32 //二维数组
初始化:
arr := [10] float32{0,1,2,3,4}
var arr = [10] float32{0,1,2,3,4}
// 对于二维数组,注意要用 ,隔开
arr := [3][4]int{
{0, 1, 2, 3} ,
{4, 5, 6, 7} ,
{8, 9, 10, 11},
}
部分元素初始化:
// 将索引为 1 和 3 的元素初始化
balance := [5]float32{1:2.0,3:7.0}
数组长度不确定的话,用三个点 ... 代替数字,一旦定义,长度便确定,定义如下:
balance := [...]float32{5.0, 4.0, 3.8, 7.0, 1.0}
访问元素的方式与C保持一致 ,比如:arr[0]
定义切片(动态数组):
可以声明一个未指定大小的数组来定义切片或者用make定义,len表示长度,capacity 表示容量,一个切片在未初始化之前默认为 nil,长度为 0
var slice1 []int
var slice1 []int = make([]int, len)
make([]int, len, capacity)
容量的增加:
可以用append 添加一个或者多个元素
numbers = append(numbers, 2,3,4)
也可以用copy :
/* 拷贝 numbers 的内容到 numbers1 */
copy(numbers1,numbers)
数组的引用:(静态动态都适用)
s := arr[startIndex:endIndex]
注意是引用,可以说是浅复制,如果改变s的某一元素的值,对应arr位置也会改变,比如:
func main() {
var arr[10] int
arr[1]=1
s:= arr[1:3]
s[0] = 2
fmt.Println(arr)
}
结果为:
[0 2 0 0 0 0 0 0 0 0]
这是我参与「第五届青训营 」笔记创作活动的第3天.