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