Go 系列教程——8.if-else 语句

这是我们 Golang 系列教程的第 8 篇。

if 是条件语句。if 语句的语法是

如果 为真,则执行 和 之间的代码。

不同于其他语言,例如 C 语言,Go 语言里的 是必要的,即使在 之间只有一条语句。

if 语句还有可选的 和 部分。

if-else 语句之间可以有任意数量的 。条件判断顺序是从上到下。如果 或 条件判断的结果为真,则执行相应的代码块。 如果没有条件为真,则 代码块被执行。

让我们编写一个简单的程序来检测一个数字是奇数还是偶数。

在线运行程序

语句检测 num 取 2 的余数是否为零。 如果是为零则打印输出 “the number is even”,如果不为零则打印输出 “the number is odd”。在上面的这个程序中,打印输出的是 。

还有另外一种形式,它包含一个 可选语句部分,该组件在条件判断之前运行。它的语法是

让我们重写程序,使用上面的语法来查找数字是偶数还是奇数。

在线运行程序

在上面的程序中, 在 语句中进行初始化, 只能从 和 中访问。也就是说 的范围仅限于 代码块。如果我们试图从其他外部的 或者 访问 ,编译器会不通过。

让我们再写一个使用 的程序。

在线运行程序

在上面的程序中,如果 为真,程序将输出 。

获取免费的 Golang 工具

一个注意点

语句应该在 语句的大括号 之后的同一行中。如果不是,编译器会不通过。

让我们通过以下程序来理解它。

在线运行程序

在上面的程序中, 语句不是从 语句结束后的 同一行开始。而是从下一行开始。这是不允许的。如果运行这个程序,编译器会输出错误,

出错的原因是 Go 语言的分号是自动插入。你可以在这里阅读分号插入规则 https://golang.org/ref/spec#Semicolons。

在 Go 语言规则中,它指定在 之后插入一个分号,如果这是该行的最终标记。因此,在if语句后面的 会自动插入一个分号。

实际上我们的程序变成了

分号插入之后。从上面代码片段可以看出第三行插入了分号。

由于 是一个单独的语句,它的中间不应该出现分号。因此,需要将 语句放置在 之后处于同一行中。

我已经重写了程序,将 else 语句移动到 if 语句结束后 的后面,以防止分号的自动插入。

在线运行程序

现在编译器会很开心,我们也一样 。

本章教程到此告一段落了,感谢您的阅读,欢迎您的任何评论和反馈。

下一个教程 - 循环

via: https://golangbot.com/if-statement/

作者:Nick Coghlan

译者:Dingo1991

校对:rxcai

本文由 GCTT 原创编译,Go 中文网 荣誉推出

本文来自企鹅号 - Go语言中文网媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C/C++基础

Linux命令(2)——od命令

od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。od命令系统默认的...

12830
来自专栏Petrichor的专栏

python: reduce函数

python3 中,reduce()函数已经被从 全局名字空间 里移除了。 转而被放置到了 fucntools模块里 。

12430
来自专栏运维小白

9.6 awk(上)

awk工具 head -n2 test.txt|awk -F ':' '{print $1}' head -n2 test.txt|awk -F ':' '{p...

19770
来自专栏Golang语言社区

golang的内存模型与new()与make()

要彻底理解new()与make()的区别, 最好从内存模型入手. golang属于c family, 而c程序在unix的内在模型: |低地址|text|dat...

6.4K70
来自专栏软件开发 -- 分享 互助 成长

字符串处理时刻提醒自己要在末尾手动加'\0'

话不多说,大家都明白字符串是以'\0'为结尾的,但偏偏今天编程序的时候忘了添加'\0'了,结果浪费时间调试一番才发现,囧死了。 先通过一段代码看看,忘记加'\0...

21750
来自专栏有趣的Python和你

循环与判断判断循环

10120
来自专栏chenjx85的技术专栏

leetcode-811-Subdomain Visit Count

409110
来自专栏desperate633

深度解析Java多线程的内存模型内部java内存模型硬件层面的内存模型Java内存模型和硬件内存模型的联系小结

Java内存模型很好的说明了JVM是如何在内存里工作的,JVM可以理解为java执行的一个操作系统,作为一个操作系统就有内存模型,这就是我们常说的JAVA内存模...

8010
来自专栏用户2442861的专栏

c++ set unordered_set区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

1.4K30
来自专栏Golang语言社区

golang的内存模型与new()与make()

要彻底理解new()与make()的区别, 最好从内存模型入手. golang属于c family, 而c程序在unix的内在模型: |低地址|text|dat...

30860

扫码关注云+社区

领取腾讯云代金券