Go 语言基础 - if-else

点击上方蓝色“Golang来啦”关注我哟

加个“星标”,天天 15 分钟,掌握 Go 语言

你好,我是四哥。

上篇文章我们学习了包的用法,这篇文章来学习 if-else 语句。

if 是一个具有布尔条件的语句,如果该条件的计算结果为 true,将会执行 if 后面大括号里的代码,如果结果为 false,则会执行 else 后大括号里的代码。

通过这篇文章,我们会学习了解 if 语句的各种语法和使用方法。

if 语法

if 语句的语法如下所示:

if condition {
}

如果判断 condition 为 true,则执行大括号 {} 之间的代码。

与 C 等其他语言不同,大括号 {} 是强制性的,即使大括号之间只有一行代码。

示例

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

package main

import (
    "fmt"
)

func main() {
    num := 10
    if num%2 == 0 { //checks if number is even
        fmt.Println("The number", num, "is even")
        return
    }
    fmt.Println("The number", num, "is odd")
}

执行[1]

上面代码第 9 行 num%2 判断 num 除以 2 余数是否为 0,因为 num 次数偶数,所以余数为 0,程序输出 The number 10 is even。

if-else 语句

if 语句有对应的 else 分支,如果 condition 结果为 false,则会执行 else 分支。

if condition {
} else {
}

在上面的代码,如果 condition 结果为 false,则 else 分支 {} 之间的代码行将被执行。

让我们使用 if-else 语句重写程序来判断数字是奇数还是偶数。

package main

import (
    "fmt"
)

func main() {
    num := 11
    if num%2 == 0 { //checks if number is even
        fmt.Println("the number", num, "is even")
    } else {
        fmt.Println("the number", num, "is odd")
    }
}

执行[2]

上面的代码中,我们没有在条件为 true 时直接返回,而是创建了 else 语句,当条件为 false 时,将执行该语句。在我们这个 case 中,由于 11 是奇数,因此 if 条件为 false,所以会执行 else 语句中的代码。

上面代码执行输出:

the number 11 is odd

if-else if-else 语句

if 语句不仅有 else 分支,还可以有 else-if 分支,语法如下:

if condition1 {
...
} else if condition2 {
...
} else {
...
}

代码执行时会从上之下判断每个分支的 condition 是否为 true。

上面的代码,如果 condition1 为 true,将会执行 condition1 后面 {} 之间的代码;

如果 condition1 为 false 且 condition2 为 true,则会执行 condition2 后面 {} 之间的代码;

如果 condition1 和 condition2 都为 false,则会执行 else 后面 {} 之间的代码。

可以有任意数量的 else-if 语句块。

通常,只要 if 和 else-if 语句有一个 condition 为 true,就会执行相应的代码块,如果没有为 true 的情况则会执行 else 分支的代码

我们使用 else-if 语句编写一段程序:

package main

import (
    "fmt"
)

func main() {
    num := 99
    if num <= 50 {
        fmt.Println(num, "is less than or equal to 50")
    } else if num >= 51 && num <= 100 {
        fmt.Println(num, "is between 51 and 100")
    } else {
        fmt.Println(num, "is greater than 100")
    }
}

执行[3]

上面的代码,else if num >= 51 && num <= 100 条件为 true,所以执行输出:

99 is between 51 and 100

if 包含初始化语句

if 语句的一种变体是在判断条件之前,可以有短变量声明语句,语法如下:

if assignment-statement; condition {
}

上面的代码片段,短变量声明语句会优先执行。

我们用上面的语法重写代码来判断数字是偶数还是奇数。

package main

import (
    "fmt"
)

func main() {
    if num := 10; num % 2 == 0 { //checks if number is even
        fmt.Println(num,"is even")
    }  else {
        fmt.Println(num,"is odd")
    }
}

执行[4]

上面代码第 8 行,变量 num 在 if 语句中被初始化,

需要注意的是,num 的作用域仅限于 if-else 语句块内,即如果我们在 if-else 之外访问 num,编译器将会报错

当我们仅仅想声明一个只在 if-else 内部使用的变量时,这种语法就可以派上用场,可确保变量的作用范围仅在 if-else 语句内。

else 语句应该在 if 语句的右大括号 } 之后的同一行开始。如果不是,会编译报错。

写一小段程序理解下:

package main

import (
    "fmt"
)

func main() {
    num := 10
    if num % 2 == 0 { //checks if number is even
        fmt.Println("the number is even")
    }
    else {
        fmt.Println("the number is odd")
    }
}

执行[5]

上面代码的第 11 行,else 语句没有紧跟着 if 语句的 } 后面 ,相反,它是另起新的一行开始。如果你执行程序编译器将会报错。

./prog.go:12:5: syntax error: unexpected else, expecting }

报错的原因在于 Go 会自动插入分号,关于插入分号的规则可以点击这里[6]查看更多信息。

其中有一项规则,如果一行代码以 } 结束,则会在 } 后面自动加上分号,所以上面代码第 11 行,会被编译器在 } 后面自动加上分号。

我们的代码就变成了:

...
if num%2 == 0 {
      fmt.Println("the number is even")
};  //semicolon inserted by Go Compiler
else {
      fmt.Println("the number is odd")
}

由于 if-else 是一个独立的语句,中间不应出现分号,因此,程序编译会报错。因此,将 else 紧跟在 if 语句的右大括号 } 之后是语法要求。

正确格式的代码如下:

package main

import (
    "fmt"
)

func main() {
    num := 10
    if num%2 == 0 { //checks if number is even
        fmt.Println("the number is even")
    } else {
        fmt.Println("the number is odd")
    }
}

执行[7]

Go 里的习惯用法

我们已经学习了各种 if-else 语句,针对同一功能可以用这些不同语句编写出不同的实现方法。例如,我们使用 if-else 语句及其变体实现了不同的方式去判断一个数字是奇数还是偶数。你可能会问,哪种方式才是 Go 语言常用的方式呢?

在 Go 的设计哲学中,最好避免不必要的分支和代码缩进。执行时尽早返回也被认为是更好的。

再来展示下之前的代码:

package main

import (
    "fmt"
)

func main() {
    if num := 10; num % 2 == 0 { //checks if number is even
        fmt.Println(num,"is even")
    }  else {
        fmt.Println(num,"is odd")
    }
}

按照 Go 语言的设计哲学该如何编写上述的代码呢?应该尽量避免 else 分支;如果 if 语句的条件为 true,则应尽早执行 return 返回。

就像下面这样:

package main

import (
    "fmt"
)

func main() {
    num := 10;
    if num%2 == 0 { //checks if number is even
        fmt.Println(num, "is even")
        return
    }
    fmt.Println(num, "is odd")

}

执行[8]

在上面代码中,一旦我们发现数字是偶数,就立即返回,就避免了不必要的 else 分支。这就是 Go 语言的哲学 -- “大道至简”,尽量追求代码简洁。

编写代码时务必牢记这点!

via: https://golangbot.com/if-statement/
作者:Naveen R

参考资料

[1]

执行: https://play.golang.org/p/RRxkgK07ul4

[2]

执行: https://play.golang.org/p/bMevwhJhguO

[3]

执行: https://play.golang.org/p/VNPbCiK9eXT

[4]

执行: https://play.golang.org/p/_X9q4MWr4s

[5]

执行: https://play.golang.org/p/RYNqZZO2F9

[6]

这里: https://golang.org/ref/spec#Semicolons

[7]

执行: https://play.golang.org/p/hv_27vbIBC

[8]

执行: https://play.golang.org/p/N8A5tPLnVYr

推荐阅读:

Go 语言基础-包

资料下载

点击下方卡片关注公众号,发送特定关键字获取对应精品资料!

  • 回复「电子书」,获取入门、进阶 Go 语言必看书籍。

  • 回复「视频」,获取价值 5000 大洋的视频资料,内含实战项目(不外传)!

  • 回复「路线」,获取最新版 Go 知识图谱及学习、成长路线图。

  • 回复「面试题」,获取四哥精编的 Go 语言面试题,含解析。

  • 回复「后台」,获取后台开发必看 10 本书籍。

对了,看完文章,记得点击下方的卡片。关注我哦~ 👇👇👇



这是持续翻译的第 33/100 篇优质文章。
如果你有想交流的话题,欢迎留言。


如果您的朋友也在学习 Go 语言,相信这篇文章对 TA 有帮助,欢迎转发分享给 TA,非常感谢!36386a48ab40291a564dfe4e2c047c8b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Seekload

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值