一文看完golang基础语法

Golang基础

我们下面将要学习的语言是被人们亲切的称为“云计算时代的开发利器”的一门编程语言,在我看来,这门语言是用过的最优雅,最亲切并且在使用过程中感觉最舒服的一门语言。下面,我们一起来学习golang这门编程语言吧!

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。

Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

学习语言第一步,我们先安装所需要的开发环境,也就是golang的解释器。直接进入官网(https://go.dev/)下载即可

下载的安装包为一个可执行文件,直接双击打开然后一直点next就可以安装成功

我们在命令提示符中输入go -h 这个命令,如果有相关的操作提示,表明我们的golang安装成功,如果没有,则可以考虑重新走一遍安装流程。

下面我们来安装vscode中的开发工具,直接在扩展中搜索golang或者go即可看到我们需要安装的扩展插件,提示:下面这个插件可能会崩溃,可以按需安装这个插件,这个插件的功能就是提供一个快捷的运行命令到vscode,当然,我们后期也有其他办法来运行golang代码。

按需安装如图的插件

因为我安装了上面的那个可选的插件,所以我得下载一些其他的依赖项,大家可以忽略

上面所有工作准备就绪后,我们安装图示的位置来创建文件并编写代码,这就是一个最简单的go语言程序

我们可以右键并选择如图所示的选项来运行当前的go语言程序

也可以使用另外一种替代方法,也就是在终端中输入go run main.go来运行,我们可以试试

基于上面的程序代码,我们现在已经很容易并且很清晰的看到我们目前go语言的语法,它的语法和Java的结构很像,我们可以类比来学习。

我们在编写go语言程序时应该注意以下几点

  1. 设置包的语句应该写正确,因为每个包的权限不同,如果包设置混乱,将导致程序混乱
  2. 导入包应该按需导入,因为go要求较严格,如果是你导入但没有使用的包,它会报错
  3. 程序的入口是主函数,但主函数不是程序的唯一出口,因为go语言有携程的写法
  4. 注意调用的函数的命名空间和调用方式

在 Go 编程语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。

在go语言中,主要有以下的数据类型:

布尔型:只有true和false,默认是false

数字类型:go语言除了常规的数值外,还支持复数

字符串型:Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。

派生型:派生型是目前编程用的较多且较为方便的数据类型

  • (a) 指针类型
  • (b) 数组类型
  • (c) 结构化类型
  • (d) Channel 类型
  • (e) 函数类型
  • (f) 切片类型
  • (g) 接口类型
  • (h) Map 类型

为了更清晰的了解go中数据类型,我们将先学习变量。首先查看变量的定义方式为var Name Type = Data,在下图中我们定义了一个名称为data1的类型为string的字符串,值为”hi,world”并将它打印了出来,这将加深我们对变量定义的理解。

下面将展示如何定义两个相同的变量并分别给它们赋值

下面将定义两种不同类型的变量并赋值

此外,下面有一种更加简便的定义并赋值变量的操作

同时定义两个相同类型的变量

Go中也可以定义常量,常量就是不可以被修改的值,当我们尝试修改常量的值时,编辑器将会报错

同时定义多个不同类型的常量

此外,常量也可以直接使用const()中使用枚举的方式来进行定义和赋值

iota,特殊常量,可以认为是一个可以被编译器修改的常量。

iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

这是go中独有的一种语法,大家需要重视一下,事实上,iota是记录从上次遇到const关键字开始const常量定义的次数

在上图中,我们分析为什么会出现这样的结果

  1. Main函数开始,遇到const函数,iota置为0
  2. Num = 0
  3. 遇到新增常量a,iota+1=1
  4. 遇到b,iota+1=2
  5. 遇到c,iota+1=3
  6. 新增num2,iota+1=4,所以num2=4

我相信通过这个小例子,大家应该理解iota是什么意思了吧!

在golang中支持的运算符和c语言一样,这里就不展开讲解

下面我们将正常来到选择分支结构,在golang中,选择分支结构与Python语法相似,与C语言语法对比的话只是少了成立条件的括号。

目前go语言中暂无多选择分支的结构,我们可以使用嵌套语法或者多写几个if结构来代替

Switch结构和C语言一样,这里不做讲解

需要注意的一点是:fallthrough将会放弃比较后面的正确与否,会强制执行后面的代码,下图因为在执行打印2后,有一个fallthrough,所以执行了打印3这个请求

Golang中的fro循环也比较简单,大家可以查看示例

与C语言类似,在go语言中同样也提供了goto操作,在进行goto操作前我们需要标记一个节点来供后面的golang中的goto语句来跳转,使用goto语句后,程序将重新跳转到标记的地方,一直往后执行。

下面开始学习函数,我们先看一段代码,这段代码是求解两个数的和的函数定义

  • func:函数由 func 开始声明
  • function_name:函数名称,参数列表和返回值类型构成了函数签名。
  • parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
  • return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
  • 函数体:函数定义的代码集合。

Eg.基于上述的介绍,我们应该可以大致理解到函数的定义方法,我们下面开始动手定义一个求解两个数中最大的数字的函数

我们上面是定义的返回一个值的函数,下面我们学习如何定义返回多个值的函数定义方法,比较简单,只需要把返回值的类型用括号括起来就行,下面我以排序两个数的大小的函数给大家演示一下。

Eg.下面我们可以开始练习一下,如何返回两个数的和与差。

数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。下面我们开始学习数组这种数据类型的定义和使用。

数组定义var 名称 [大小] 数据类型
 
 
下面有一种更加简便的方法
 
 
在目前高速发展的互联网环境中,我们前面学习的数据类型是远远不够用的,例如我们在进行统计一个学生的信息时,我们无法使用一个单独的数据类型来表示他,所以,我们将要介绍下面的数据类型--结构体。
在golang中定义结构体比较简单,直接使用type 名称 struct{}即可
 
 
注意:填充结构体数据时,我们使用的符号为{},而不是(),请不要犯这种低级的错误
访问结构体的数据,直接用结构体变量.结构体参数即可
 
 
 
 
Go语言中有着和Python类似的range函数可以为我们提供一定的遍历操作
,我们可以使用它来遍历数组
 
 
在上面的例子中,range将返回多个结果,我们不需要index值,使用我们用_来接收,并使用i来接收我们需要的值。
 
 
众所周知,map是我们编程中前后端交互使用最多的一种数据结构,我们广泛的使用它在json中,我们开始学习map的相关操作
变量名:= make(map[键的类型]值的类型)
 
 
下面对map进行添加和删除操作
 
 
 
 
 
 

Go语言中的指针类型,在C语言和cpp中,我们比较清晰的了解指针是什么,如何去运用指针,在go语言中的指针操作和c语言中的指针类似。我们查看下面一个案例

下面解析上述的操作:

  1. 我们定义了一个int型的变量data1=1
  2. 然后我们传入data1的地址到我们定义的函数change中
  3. 在change中,我们使用*x获取到该地址代表的值,然后将该地址代表的值指向2
  4. 使用最后的结果是2

在go语言中,同样有接口,我们可以编写接口,让结构体继承接口中的方法并实现接口中的方法

我们在上述代码中,新建了一个名为Animal的接口,并且新建了一个Dog结构体,并且实现了接口中的eat方法,最后在主函数中调用这个方法

Golang之所以被称为云计算的利器,有一个原因就是其天生的多线程能力,天生支持高并发的需求,下面我们将用一段代码来解释高并发

在上面的例子中,我们建立了一个函数来输出5遍数据并每输出一次暂停1s,然后我们在主函数中运行了一个高并发的函数和一个主程序的函数。我们可以观察输出的结果是具有随机性的,所以达到了高并发的要求,此外,我们应该注意,在执行多线程和高并发时,我们应该保证主函数有可以执行的语句,否则将看不到高并发的执行效果。例如,下面这段代码将看不到输出的结果

在go语言中还有一个比较特殊的数据结构叫做通道,见字识意,通道具有数据流通性,可具有的操作包括数据的输入,数据的输出等。

首先,声明一个通道很简单,只需要名称 := make(chan 数据类型)即可,下面声明了一个为整型的通道
 
 
在go语言中,通道的输入和输出也非常简单,我们可以通过箭头>和<来进行操作,例如,我想输入一个字符串到通道ch,则可以使用代码 ch < “整型”
 
 
在make的时候,我们指定第二个参数为我们需要每次拿出来的个数,我们指定为一,并打印查看
 
 
 
 
在go语言中,它的社区也是相当发达的,所以产生了一系列的包管理工具,可以方便我们的快速开发,我们现在以go modules为例。输入go mod init 项目名即可初始化项目
 
 
例如,我们可以使用net/http库来实现一个简单的http服务器
 
 
 
 
好的,到现在你已经学的差不多了,让我们拿出电脑,进行一场异常快乐的go语言编程吧!
Eg.使用golang语言编写区块链模拟程序,至少包括以下内容:
  1. 区块链创世链自义定数据
  2. 添加区块操作
  3. 校验操作
  4. 查看整链操作
 
 
 
 

猜你喜欢

转载自blog.csdn.net/qq_35889508/article/details/128125279
今日推荐