二、slice和数组的区别,map的注意事项 -go语言笔记
来源:互联网 发布:知否的人物关系图 编辑:程序博客网 时间:2024/04/30 16:01
这次要说说array,slice,map。虽然前面已经说过了,但是实际使用中发现对这几个的使用和理解还是不够详细
现在再重新看看这几个类型
array类型
array是固定长度的数组,这个和C语言中的数组是一样的,使用前必须确定数组长度。但是和C中的数组相比,又是有一些不同的:
1 Go中的数组是值类型,换句话说,如果你将一个数组赋值给另外一个数组,那么,实际上就是将整个数组拷贝一份
2 如果Go中的数组作为函数的参数,那么实际传递的参数是一份数组的拷贝,而不是数组的指针。这个和C要区分开。因此,在Go中如果将数组作为函数的参数传递的话,那效率就肯定没有传递指针高了。这个是不是有点陷阱的感觉?
3 array的长度也是Type的一部分,这样就说明[10]int和[20]int是不一样的。
array的结构用图示表示是这样的:
len表示数组的长度,后面的int储存的是实际数据
slice类型
看看Effective Go是怎么夸赞slice的:
Slice是Go程序中最常用的表示序列数组的类型。为什么最经常用它呢?
1 slice是可变长的
定义完一个slice变量之后,不需要为它的容量而担心,你随时可以往slice里面加数据
比如:
v:=[]string{}
v=append(v, "hello")
这里附带说一下,slice和array的写法很容易混
v:=[2]string{"str1", "str2"} //这个是array
m:=[]string{"str1","str2"} //这个是slice
写法上默念:array有长度slice没长度,array有长度slice没长度…
2 slice是一个指针而不是值。
指针比值可就小多了,因此,我们将slice作为函数参数传递比将array作为函数参数传递会更有性能。
slice是一个指针,它指向的是一个array机构,它有两个基本函数len和cap。
看下面的图示:
slice是一个带有point(指向数组的指针),Len(数组中实际有值的个数),Cap(数组的容量)
比如上面的这个slice,它指向的数组是[3]int,其中的前两个有值,第三个为空
那么
len(slic) = 2
cap(slic) = 3
append函数就理解为往slice中加入一个值,如果未达到容量(len<cap)那么就直接往数组中加值,如果达到容量(len = cap)那么就增加一个新的元素空间,将值放在里面
map结构
map结构也经常常用,它和php中的array()几乎一模一样,是一个key-value的hash结构。key可以是除了func类型,array,slice,map类型之外的类型。
它的使用也是非常简单
m:=map[string]string{}
m["key1"] = "val1"
map结构和slice是一样的,是一个指针。赋值的时候是将指针复制给新的变量
map的增删改查操作是这样的:
package main import( "fmt") func main() { m := map[string]string{"key1":"val1"} fmt.Println(m) m["key2"] = "val2" fmt.Println(m) p := m["key1"] fmt.Println(p) delete(m, "key1") fmt.Println(m) }
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)}
- 二、slice和数组的区别,map的注意事项 -go语言笔记
- go语言的array,slice和map
- Go语言中数组和slice的区别
- [go语言]slice和map
- Go学习笔记-Go语言数组array和切片slice
- Go语言学习笔记 -- array、slice和map
- Go语言学习笔记2——数组和Slice
- Go语言中的 Array, Slice和 Map
- Go语言中的 Array, Slice和 Map
- Go语言中的map和slice
- go的数组与slice
- go语言学习---数组和slice
- Go语言中的数组和Slice
- 关于 Go 中 Map 类型和 Slice 类型的传递
- Go语言 数组(Array), 分片(Slice), Map 以及 Set
- Go语言_array,slice,map
- Go语言学习笔记(四) [array、slice、map]
- 数组中splice和slice的区别
- 用C语言测试Multiple-Query
- Hibernate入门
- 苹果原生GET登录
- 关于CSS 外边距合并的问题
- java模拟登录。不会存在跨域问题
- 二、slice和数组的区别,map的注意事项 -go语言笔记
- 这段时间
- ajax传递参数含有特殊字符解决方案
- 彻底理解ldpi、mdpi、hdpi、xhdpi、xxhdpi
- Windows下安装Cygwin配置Hadoop集群
- Android自定义控件之onLayout
- 博客已迁移至 http://zhengboyang.com 。
- 数据的保存、以及读写操作
- pyPdf和pyPdf2在合并pdf时的那个异常