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

栏目: Java · 发布时间: 7年前

内容简介:按照以往开一些专题的风格,第一篇一般都是“从HelloWorld开始”但是对于Go,思来想去,感觉真的从“HelloWorld”说起,压根撑不住一篇的篇幅,因为Go的HelloWorld太简单了。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

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

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

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

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使用体验差异


以上所述就是小编给大家介绍的《Go语言入门——数组、切片和映射》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

Data Structures and Algorithm Analysis in Java

Data Structures and Algorithm Analysis in Java

Mark A. Weiss / Pearson / 2006-3-3 / USD 143.00

As the speed and power of computers increases, so does the need for effective programming and algorithm analysis. By approaching these skills in tandem, Mark Allen Weiss teaches readers to develop wel......一起来看看 《Data Structures and Algorithm Analysis in Java》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具