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錯誤。例如在二維數組的內層子數組需要一個個添加值時,因爲創建二維數組可能你只賦予了二維數組的長度,並沒有對內層子數組進行有效初始化,在使用時,如果沒注意,就會報錯。

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