Golang——选择、循环

目录

if/else

if语句的语法

复合if语句

switch case

基本语法

使用多个表达式

调用函数

使逻辑进入到下一个case语句

for

基本语法

空的预处理语句和后处理语句

continue&break

使用 defer 函数进行控制

defer函数


if/else

if语句的语法

与c语言不同的是,在Go中,你不需要在条件中使用括号,但是,大括号仍然是必须有的。此外,为了减少行,go语言不支持三目运算符“?:“,因此每次都需要编写完整的if语句。

下面是 if 语句的一个基本示例:

package main
​
import "fmt"
​
func main() {
    x := 27
    if x%2 == 0 {
        fmt.Println(x, "is even")
    }
}

复合if语句

Go 支持复合 if 语句。 可以使用 else if 语句对语句进行嵌套。 下面是一个示例:

package main
​
import "fmt"
​
func givemeanumber() int {
    return -1
}
​
func main() {
    if num := givemeanumber(); num < 0 {
        fmt.Println(num, "is negative")
    } else if num < 10 {
        fmt.Println(num, "has only one digit")
    } else {
        fmt.Println(num, "has multiple digits")
    }
}

注意:在go语言中,当你在if语句中声明了一个新的变量时,该变量只能在if语句中的任意位置使用,如果在if语句之外使用了该变量,编译器将会报错。

switch case

基本语法

if 语句一样,switch 条件不需要括号。 最简单形式的 switch 语句如下所示:

package main
​
import (
    "fmt"
    "math/rand"
    "time"
)
​
func main() {
    sec := time.Now().Unix()
    rand.Seed(sec)
    i := rand.Int31n(10)
​
    switch i {
    case 0:
        fmt.Print("zero...")
    case 1:
        fmt.Print("one...")
    case 2:
        fmt.Print("two...")
    default:
        fmt.Print("no match...")
    }
}

其中的time,rand等是为了产生随机数

使用多个表达式

有时,多个表达式仅与一个 case 语句匹配。 在 Go 中,如果希望 case 语句包含多个表达式,请使用逗号 (,) 来分隔表达式。 此方法可避免代码重复。

以下代码示例演示了如何包含多个表达式。

package main
​
import "fmt"
​
func location(city string) (string, string) {
    var region string
    var continent string
    switch city {
    case "Delhi", "Hyderabad", "Mumbai", "Chennai", "Kochi":
        region, continent = "India", "Asia"
    case "Lafayette", "Louisville", "Boulder":
        region, continent = "Colorado", "USA"
    case "Irvine", "Los Angeles", "San Diego":
        region, continent = "California", "USA"
    default:
        region, continent = "Unknown", "Unknown"
    }
    return region, continent
}
func main() {
    region, continent := location("Irvine")
    fmt.Printf("John works in %s, %s\n", region, continent)
}

请注意,在 case 语句的表达式中包含的值对应于 switch 语句验证的变量的数据类型。 如果包含一个整数值作为新的 case 语句,程序将不会进行编译。

调用函数

在case语句中,还可以将表达式中要匹配的条件设置为函数的返回值

使逻辑进入到下一个case语句

很多人在学完c语言后,对于case语句需要加上break一定印象深刻。

但在 Go 中,当逻辑进入某个 case 时,它会退出 switch 块,除非你显式停止它。 若要使逻辑进入到下一个紧邻的 case,请使用 fallthrough 关键字。

注意:使用该关键字后,跳转到下一个case时不会检验条件是否满足。

for

基本语法

go与c语言的for循环很相似,不过go的for循环表达式像switch一样不需要括号,但依然需要大括号。for的表达式中需要分号来分隔。

空的预处理语句和后处理语句

在c语言中,可以使用 while 关键字编写循环模式,在这些模式中,只有条件表达式是必需的。 Go 没有 while 关键字。 但是,你可以改用 for 循环。 此预配使预处理语句和后处理语句变得可选。

使用以下代码片段确认是否可以在不使用预处理语句和后处理语句的情况下使用 for 循环。

package main
​
import (
    "fmt"
    "math/rand"
    "time"
)
​
func main() {
    var num int64
    rand.Seed(time.Now().Unix())
    for num != 5 {
        num = rand.Int63n(15)
        fmt.Println(num)
    }
}

只要 num 变量保存的值与 5 不同,程序就会输出一个随机数。

continue&break

用法与c基本相同。

使用 defer 函数进行控制

defer函数

在 Go 中,defer 语句会推迟函数(包括任何参数)的运行,直到包含 defer 语句的函数完成。 通常情况下,当你想要避免忘记任务(例如关闭文件或运行清理进程)时,可以推迟某个函数的运行。

可以根据需要推迟任意多个函数。 defer 语句按逆序运行,先运行最后一个,最后运行第一个。

通过运行以下示例代码来查看此模式的工作原理:

package main
​
import "fmt"
​
func main() {
    for i := 1; i <= 4; i++ {
        defer fmt.Println("deferred", -i)
        fmt.Println("regular", i)
    }
}

下面是代码输出:

regular 1
regular 2
regular 3
regular 4
deferred -4
deferred -3
deferred -2
deferred -1

在此示例中,请注意,每次推迟 fmt.Println("deferred", -i) 时,都会存储 i 的值,并会将其运行任务添加到队列中。 在 main() 函数输出完 regular 值后,所有推迟的调用都会运行。 这就是你看到输出采用逆序(后进先出)的原因。

defer 函数的一个典型用例是在使用完文件后将其关闭,防止在打开文件完成操作后忘记关闭文件。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值