Go 语言入门系列:Go 语言中的常量别名与控制结构

前文回顾

前面一篇文章主要介绍了 Go 语言中的指针基本概念与相关用法。Go 语言限制了指针类型的偏移和运算能力,使得指针类型具备了指针高效访问的特性,但又不会发生指针偏移,避免了非法修改敏感数据的问题。本文将会介绍常量与别名的基本使用,以及补充介绍 Go 编译工具相关的内容,作为系列文章,在前面的文章中漏掉了介绍,这里我们补充介绍一下。

代码的实现一般有三种结构都是:

  • 顺序结构:代码从上往下依次执行

  • 分支结构:根据不同的条件,执行不同的语句

  • 循环结构: 根据指定的条件,重复执行某段代码。

顺序结构是我们最常见的实现,比较简单,我们在本文也将会学习 Go 语言的分支和循环结构的用法。

常量与别名

相对于变量运行时可变的特点,常量的值在声明之后是不允许变化。通过const关键字可以声明常量,声明常量的样式与声明变量非常相似,如下例所示:

const str string = "Go is Good!"

上述代码中声明了一个类型为 stringstr 常量,同样可以使用 Golang 的类型推导省略常量声明时的类型和同时声明多个常量,如下例子所示:

const name = "Go is Good!"
const (
 surname = "王"
 personalName = "小二"
)

Golang 中同样提供了类型别名的语法特性。类型别名是类型的另一个名称,本质上它与原类型是属于同一个类型的,它相当于原类型的一个别称。定义一个类型别名的样式如下:

type name = T

与之相对的,类型定义的样式如下:

type name T

类型定义将会创建一种新的类型,新建的类型将具备原类型的特性。我们通过以下例子理解类型别名和类型定义之间的区别:

package main

import "fmt"

type aliasInt = int // 定义一个类型别名
type myInt int // 定义一个新的类型

func main()  {

 var alias aliasInt
 fmt.Printf("alias value is %v, type is %T\n", alias, alias)

 var myint myInt
 fmt.Printf("myint value is %v, type is %T\n", myint, myint)
}

输出的结果为:

alias value is 0, type is int
myint value is 0, type is main.myInt

从输出结果中,我们可以看出 int 的类型别名 aliasInt 的类型还是 int,而重新定义的 myInt 属于新的类型,但是它的值和 aliasInt 一样都为 0。

编译工具

为了使我们的程序能够测试运行起来,我们需要掌握一些简单 Golang 编译工具和命令。

go run

go run 命令将直接编译和执行源码中的 main 函数,但是并不会留下任何可执行文件(可执行文件被放在临时文件中被执行,之后将被自动删除)。可以在 go run 命令后添加参数,这部分参数会作为代码可以接受的命令行输入提供给程序,这部分语法我们将在接下来的章节进行演示。

来到我们 HelloGo.go 文件的目录下,执行如下命令:

go run HelloGo.go

就能够愉快地启动我们的聊天机器人并与其进行聊天。

Enter 'EOF' to shut down:
你好
AI: 你陪我玩我就好啦
今天天气真好
AI: 是很好。没太阳

go build

通过 Golang 的并发特性对代码进行函数粒度的并发编译,Golang 的编译速度非常快。go build 命令会将源码编译为可执行文件,默认将编译该目录下的所有的源码。也可以在命令后添加多个文件名, go build 命令将编译这些源码,输出可执行文件。

同样来到我们 HelloGo.go 文件的目录下,执行如下命令:

go build -o HelloGo

或者

go build HelloGo.go

都将在当前目录下生成一个 HelloGo 的可执行文件,直接运行,也可以与我们的聊天机器人谈笑风生。

分支和循环控制

Golang 的分支控制与其他语言一致,简单的表达样式如下:

if expression1 {
 branch1
} else if expression2 {
 branch2
} else {
 branch3
}

Golang 中规定与 if 匹配的 { 必须与 if 和表达式位于同一行,否则会发生编译错误。同样的,else 也必须上一个分支的 } 位于同一行。表达式两边可以省略 ()

除了 if 关键值,Golang 中还提供了 switch 语句对大量的值和表达式进行判断。为了避免人为错误,switch 中的每一个 case 都是独立的代码块,不需要通过 break 关键字跳出 switch 选择体,如果需要继续执行接下来的 case 判断,需要添加 fallthrough 关键字对上下两个 case 进行连接。除了支持数值常量,Golang 的 switch 还能对字符串、表达式等复杂情况进行处理。一个简单的例子如下所示:

// 根据人名分配工作
name := "小红"
switch name {
case "小明":
 fmt.Println("扫地")
case "小红":
 fmt.Println("擦黑板")
case "小刚":
 fmt.Println("倒垃圾")
default:
 fmt.Println("没人干活")
}

在上面的代码中,每一个 case 都是字符串样式,且无需通过 break 控制跳出。

如果我们需要在 case 中判断表达式,在这种情况下 switch 后面不再跟判断变量,连判断的目标都没有了,如下例子所示:

// 根据分数判断成绩程度
score := 90
switch  {
case score < 100 && score >= 90:
 fmt.Println("优秀")
case score < 90 && score >= 80:
 fmt.Println("良好")
case score < 80 && score >= 60:
 fmt.Println("及格")
case score < 60 :
 fmt.Println("不及格")
default:
 fmt.Println("分数错误")
}

Golang 的循环体仅提供了 for 关键字,没有其他语言中提供的 while 或者 do-while 形式,基本样式如下:

for init;condition;end{
    循环体代码
}

这其中,初始语句、条件表达式、结束语句都是可缺省的。如果三者都缺省,这将变成一个无限循环语句。可以通过 break 关键字跳出循环体,和使用 continue 关键字继续下一个循环。

小结

本文主要介绍了 Go 语言中的常量与别名,常量的值在声明之后是不允许变化。通过const关键字可以声明常量,声明常量的样式与声明变量非常相似。除此之外,还补充介绍了 Go 编译工具的相关命令,以及基础语法中的分支和循环控制,这是很多语言都有的基本功能。

推荐阅读

    Go 语言入门系列:指针的基本应用

    Go 语言入门系列:原生数据类型

    Go 语言入门系列:基本语法介绍之变量的声明与初始化

    Go 语言入门系列:第一个 Go 程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值