golang爬坑笔记之自问自答系列(3)——初始化与赋值

在Golang中,如果你想使用某个变量标识符表示数据,首先需要对其进行类型申明,习惯了Python需要注意。

代码:

package main

import "fmt"

func main() {
	var a  = make([]int, 4)
	fmt.Printf("make初始化:%d\n",a)
	a = append(a,1)
	fmt.Println(a)

	var b []int
	fmt.Printf("申明类型初始化:%d\n",b)
	b = append(b,1)
	fmt.Println(b)
}

输出:

make初始化:[0 0 0 0]
[0 0 0 0 1]
申明类型初始化:[]
[1]

这里要注意的是

使用make初始化数组的时候,需要声明其len()属性,cap()为可选项,声明之后的初始数组为对应类型的零值数组:int类型对应0,string类型对应""。

而使用 var a []int这种方式申明时,a只代表[]int类型,其内容为空,len()与cap()均为0。因此便有了以下的问题:

代码:

package main

import "fmt"

func main() {
	var a  [][]int
	a[0] = []int {1,2,3}
	fmt.Println(a)
}

错误信息:

panic: runtime error: index out of range

要想完成上述任务,有两种方式:

代码:

package main

import "fmt"

func main() {
	var a  [][]int
	a = append(a, []int{1,2,3})
	fmt.Println(a)

	var b  = make([][]int,1)
	b[0] = []int{1,2,3}
	fmt.Println(b)
}

还有一点:

在golang中可以使用“:=”符号进行标识符初始化,其作用和make()函数一样。

代码:

package main

import "fmt"

func main() {
	c  := []int{1,2,3}
	fmt.Println(len(c),cap(c),c)
}

输出:

3 3 [1 2 3]

虽然看似这个不是什么难点,但是在实际应用中,会经常因为初始化不当,出现index out of range错误。例如在二维数组的内层子数组需要一个个添加值时,因为创建二维数组可能你只赋予了二维数组的长度,并没有对内层子数组进行有效初始化,在使用时,如果没注意,就会报错。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章