一直在从事php开发的这块工作,发现有些同学总容易把slice和数据搞混,现把自己对这块的一些经验总结以及应用map时的一些注意事项和大家分享下,希望对大家的学习工作有所帮助。
array 固定长度的数组,使用前必须确定数组的长度
1,go中的数组是值类型
2,如果go中的数组作为函数的参数的话,实际是传递一份数组的拷贝。而不是数组的指针
3,数组的长度也是type的一部分,[10]int 和[20]int是不一样的
slice是可变长的,定义一个slice变量之后,不需要为它的容量而担心,你随时可以往slice里面加数据
var :=[]string{}
v=append(v,"hello")
注意:slice和array的写法很容易混淆
v :=[2]string{"str1","str2"} //这个是数组
m :=[]string{"str1","str2"} //这个是slice
写法上array有长度slice没有长度
slice是一个指针而不是值。
指针比值小很多,因此,我们将slice作为函数传递比数组传递更有性能。
slice是一个指针,它指向的是一个array结构,他们都有len和cap。
map结构
map结构跟php的array几乎一模一样,是一个key-value的hash结构,key可以是除了func类型,array,slice,map类型之外的类型。
map结构和slice是一样的,是一个指针赋值的时候是将指针复制给新的变量。
map 在使用之前必须用 make 来创建(不是 new);一个值为 nil 的 map 是空的,并且不能赋值。
func main() {
m = make(map[string]Vertex)
m["Bell Labs"] = Vertex{
40.68433, 74.39967,
}
fmt.Println(m["Bell Labs"])
}
for 循环的 range 格式可以对 slice 或者 map 进行迭代循环。
for i, v := range pow {
fmt.Printf("2**%d = %d\n", i, v)
}
}