在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错误。例如在二维数组的内层子数组需要一个个添加值时,因为创建二维数组可能你只赋予了二维数组的长度,并没有对内层子数组进行有效初始化,在使用时,如果没注意,就会报错。