go快速入门(3) | 青训营笔记

67 阅读2分钟

这一篇主要是对循环语句和数组的介绍:

循环语句

在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天.