Go语言_array,slice,map

简介:

首先庆祝下golang终于通过了gfw的审核,可以不用FQ访问了。goer就可以光明正大地访问http://golang.org/

这次还是要说说array,slice,map。虽然前面已经说过了,但是实际使用中发现对这几个的使用和理解还是不够详细

现在再重新看看这几个类型

array类型

array是固定长度的数组,这个和C语言中的数组是一样的,使用前必须确定数组长度。但是和C中的数组相比,又是有一些不同的:

 

1 Go中的数组是值类型,换句话说,如果你将一个数组赋值给另外一个数组,那么,实际上就是将整个数组拷贝一份

2 如果Go中的数组作为函数的参数,那么实际传递的参数是一份数组的拷贝,而不是数组的指针。这个和C要区分开。因此,在Go中如果将数组作为函数的参数传递的话,那效率就肯定没有传递指针高了。这个是不是有点陷阱的感觉?

3 array的长度也是Type的一部分,这样就说明[10]int和[20]int是不一样的。

 

array的结构用图示表示是这样的:

clip_image001

len表示数组的长度,后面的int储存的是实际数据

slice类型

看看Effective Go是怎么夸赞slice的:

clip_image002

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。

看下面的图示:

clip_image003

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的增删改查操作是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)
 
}

clip_image004

目录
相关文章
|
1月前
|
存储 安全 Go
|
4月前
|
存储 安全 Java
Go 基础数据结构的底层原理(slice,channel,map)
Go 基础数据结构的底层原理(slice,channel,map)
53 0
|
4月前
|
存储 缓存 安全
Go Map 的 11 连问
Go Map 的 11 连问
26 0
|
4月前
|
Go
go map进行有序的排序
go map进行有序的排序
19 0
|
6月前
|
Go
Go 语言学习之map
Go 语言学习之map
30 0
|
6月前
|
存储 缓存 安全
90%的Go语言程序员map遍历方式都是错的
90%的Go语言程序员map遍历方式都是错的
33 0
|
20天前
|
存储 缓存 安全
掌握Go语言:Go语言Map,高效键值对集合的应用与注意事项详解(26)
掌握Go语言:Go语言Map,高效键值对集合的应用与注意事项详解(26)
|
6月前
|
数据挖掘 Go 数据库
Go语言map这么查询 才是高手风范
Go语言map这么查询 才是高手风范
121 0
|
2月前
|
存储 安全 Go
深入浅出Go语言Map
深入浅出Go语言Map
19 0
|
6月前
|
存储 Go 开发者
100天精通Golang(基础入门篇)——第12天:深入解析Go语言中的集合(Map)及常用函数应用
100天精通Golang(基础入门篇)——第12天:深入解析Go语言中的集合(Map)及常用函数应用
32 0

热门文章

最新文章