Go语言入门——数组、切片和映射

Go语言入门——数组、切片和Map

按照以往开一些专题的风格,第一篇一般都是“从HelloWorld开始”

但是对于Go,思来想去,感觉真的从“HelloWorld”说起,压根撑不住一篇的篇幅,因为Go的HelloWorld太简单了。

1、简介

Go是什么?

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。——摘自百度百科

Github地址

https://github.com/golang/go

官网地址

https://golang.org

中文网社区

https://studygolang.com

如果需要下载安装包,可以进入https://studygolang.com/dl下载,速度较快

https://www.golangtc.com/

关键字

简单,学习曲线低,天然高并发,背景雄厚,大厂拥抱

2、环境搭建

下载安装

进入官网或者https://studygolang.com/dl下载对应系统的安装包(我的是MacOS系统)

下载成功后点击安装(无脑下一步即可)

环境变量配置

打开命令行执行sudo vi ~/.bash_profile配置GOROOT和GOPATH

0518-1-配置环境变量.png
0518-2-配置环境变量2.png

注意:GOPATH如果不配置,默认在会在用户目录下新建go目录,GOPATH相当于工作空间,有点类似Java开发的workspace。

配置完成执行go version出现类似

go version go1.12.4 darwin/amd64

则表示安装成功

开发工具

至于开发工具看个人喜好,鉴于做Java开发使用的宇宙第一好用IDE intellij idea确实好用,所以个人还是继续用JetBrain的产品Goland作为开发IDE。

当然,除此以外,还有Atom,VS code等等。

下面开始进入正题,说说Go语言中的数组、切片和映射即Map。在此之前还需要介绍几个背景知识,不然第一次看Go的语言可能有点懵~

3、背景知识

类型后置

不同于Java、C++等很多语言,Go采用类型后置的方式声明变量

比如Java中声明一个int的基本类型是这样的

int a = 3;

而Go里面其中一种声明方式是这样的

var a int
a = 3

多样的赋值语句

Go的声明和初始化方式丰富多样,有点太丰富了,听说2.0版本要稍微收收规范下

比如如下的方式是正确的

  • 方式1
var a int
a = 3

解读:初始化语句表明了a是一个int类型

然后才能对一个int类型进行赋值

  • 方式2
var a = 3

解读:虽然没有明确表示这是一个int,但是Go可以根据后面的赋值推断出a的类型

  • 方式3
a := 3

解读:这是一种简单高效的初始化和赋值方式,:=表示初始化一个变量a并同时对其赋值为3

以下方式是不正确的

  • 方式1
var a

解读:基于这样的信息,a没有赋值,Go编译器是无法知道a的类型,也无法对其进行初始化和赋值了

  • 方式2
var a int
a := 3

解读:虽然正确的声明了一个int类型的a变量,但是下面的:=相当有重新声明了一个变量a,所以重复申明也会编译出错

有了上面两个背景知识储备,加上自个儿在相关语言上面深厚的积累,开始下面的讲解就没事问题了~

4、数组

数组几乎是每个语言必备的数据结构之一,Go也不例外。

数组也有多种初始化和赋值方式

  • 方式1
var arr [5]int // 注意这里必须要声明大小,下面要讲的切片这里可以不用声明大小
arr[0] = 0
arr[1] = 1
arr[4] = 4
  • 方式2
var arr []int
arr = make([]int, 4) 

该方式通过make指定数组的大小,这里表示数组容量为4,超过4,比如赋值如arr[4]=4,则会报错panic: runtime error: index out of range

panic相当于Java里面的Exception

  • 方式3
var arr [5]int{1,2,3,4,5}
  • 方式4
arr := [5]int{1,2,3,4,5}
  • 方式5
var arr [...]int{0:1, 3:4, 1:2} // x:y,其中x表示index,y表示值,...表示变长和Java中的变长函数一个道理

5、切片

切片有些语言里面可能没有这个名词,我记得Python里面有,Java里就没有。

切片可以看成是一种特殊的数组,该种数组可以变长。其生命和初始化方式也有多种

  • 方式1
var s []int{1,2,3,4,5}
s := []int{1,2,3,4,5}
  • 方式2
s := make([]int, 3, 5) // 3所在位置表示切片长度,5所在位置表示容量即最大可能存储的元素个数

注意:s[2]=2该赋值是合法的,但是s[3]=3则会报错,因为需要使用append追加元素,类似

s = append(s, 3) // 此时len=4, cap=5
s[3] = 10   // 对s[3]重新赋值,合法

另外如果赋值时,切片长度没超过定义的切片的长度,返回原来的切片地址,如果超过了长度,切片会扩容进行重新分配地址。

  • 方式3
s := arr[1:3]   // 表示截取数组一部分成为一个切片,1表示起始位置,3表示结束为止,是一个左闭右开区间

6、Map

map就是键值对,跟Java的没差

声明好初始化的方式如下

  • 方式1
var m map[string]int    // string所在位置表示key的类型,int所在位置表示value的类型
  • 方式2
m := make(map[string]int, 5)    // 5所在位置表示map的容量
  • 方式3
m = map[string]int{"jackie":1, "zheng":8}

7、共同点和差异点

  • 数组、切片和Map都可以通过make关键字进行初始化

  • 数组、切片和Map都支持在{}里面使用index:value进行初始化值

  • 数组和切片差别在于数组必须声明数组容量,即使是变长声明类型,也必须列出具体数组元素

  • 切片有append函数,涉及到扩容等问题

8、下篇预告

1、数组、切片和map的遍历以,切片扩容,map根据key和value排序等

2、Go和Java使用体验差异

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容