专栏首页aoho求索Go 语言入门系列:Go 语言中的常量别名与控制结构

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 编译工具的相关命令,以及基础语法中的分支和循环控制,这是很多语言都有的基本功能。

本文分享自微信公众号 - aoho求索(aohoBlog),作者:cangwu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go语言入门系列(五)之指针和结构体的使用

    我们写的代码都存储在外存(C盘、D盘)中,比如我存在了D:\Work\Program\go目录下。如果你想要运行你的代码,必须先把你的代码加载进内存中,然后交给...

    二十二画程序员
  • Golang 入门系列(五)GO语言中的面向对象

    其实GO并不是一个纯面向对象编程语言。它没有提供类(class)这个关键字,只提供了结构体(struct)类型。

    架构师精进
  • [GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本。因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识;另一方面是分享与读者,希...

    Eastmount
  • Go 语言入门练手项目推荐

    大家好,我是 roseduan,经常看到一些小伙伴学习完 Go 语言的基础知识之后,无法找到合适的练手项目,然后就很迷茫。

    roseduan
  • Go基础系列 | 1. 前导

    “Go基础系列”是对 Go语言基础的系列梳理文章。在开始这个系列之前,我先”坦白“下我的一个工作经历,再对这个系列说明几个问题。

    潇洒哥和黑大帅
  • Go语言入门

    Go语言相对比较简单,与C语言有点像,所以在有C基础的情况下,再学习下Go的特性,基本就懂得怎么写了,学起来不会像Scala那么痛苦,太多的特性及语法糖。Go奉...

    潇洒哥和黑大帅
  • 一起来学Go --- (go的简介以及环境的安装)

    相信大家,看到这篇文章的时候,已经自己在百度百科了解了go的发展史已经特性,再次我依然。。。。得哔哔叨一会。   ^.^

    Wyc
  • Go语言实践:从新手入门到上线真实的小型服务所遇到的那些坑

    Teamwork团队在去年写了近20万行Go代码,建造了一堆速度奇快的小型HTTP服务,本文列出了他们总结的9条经验教训。 为什么选择Go语言?Go语言,又称G...

    CSDN技术头条
  • Go语言实践:从新手入门到上线真实的小型服务所遇到的那些坑

    摘要: Teamwork团队在去年写了近20万行Go代码,建造了一堆速度奇快的小型HTTP服务,本文列出了他们总结的9条经验教训。 为什么选择Go语言?Go...

    李海彬
  • Go语言实践:从新手入门到上线真实的小型服务所遇到的那些坑

    摘要: Teamwork团队在去年写了近20万行Go代码,建造了一堆速度奇快的小型HTTP服务,本文列出了他们总结的9条经验教训。 为什么选择Go语言?Go...

    李海彬
  • Go语言实践:从新手入门到上线真实的小型服务所遇到的那些坑

    摘要: Teamwork团队在去年写了近20万行Go代码,建造了一堆速度奇快的小型HTTP服务,本文列出了他们总结的9条经验教训。 为什么选择Go语言?Go...

    李海彬
  • 大道至简—GO语言最佳实践

    被称为GO语言之父的Rob Pike说,你是否同意GO语言,取决于你是认可少就是多,还是少就是少。

    腾讯技术工程官方号
  • 大道至简-GO语言最佳实践

    2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Griesemer和Ken Thompson两位牛人,决定创造一种新语...

    嘉为蓝鲸
  • 实效go编程--1

    实效Go编程 版本:2013年12月22日 引言 示例 格式化 注释 命名 包名 获取器 接口名 驼峰记法 分号 控制结构 If 重新声明与再次赋值 For S...

    李海彬
  • C语言入门系列之5.循环控制结构程序

    循环结构是程序中一种很重要的结构。 其特点是:在给定条件成立时,反复执行某程序段,直到条件不成立为止。 给定的条件称为循环条件,反复执行的程序段称为循环体。...

    cutercorley
  • 程序员技术选型:写Go还是Java?

    本文作者根据自己的使用体验,详细对比了 Go 和 Java 的使用差异,给了开发者们一个中肯的选用参考。

    深度学习与Python
  • Go语言基础

    Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, ...

    刘亦枫
  • 适合 Go 新手学习的开源项目——在 GitHub 学编程

    故事要从 2007 年说起。因为受够了 C++ 煎熬的 Google 首席软件工程师 Rob Pike 召集 Robert Griesemer 和 Ken Th...

    HelloGitHub
  • 一文理清 Go 引用的常见疑惑

    之所以要谈它,一方面是之前的我也有些概念混乱,想梳理下,另一方面是因为很多人对引用都有疑问。我经常会看到与引用有关的问题。

    波罗学

扫码关注云+社区

领取腾讯云代金券