Golang 新手入门教程(六): 循环与条件判断

本节重点:

  • 学会使用 For,if,swich 等循环判断语句

在编写 Go 程序的时候,我们不仅会用前面学到的数据结构来存储数据,还会用到 ifswitchfor 来进行条件判断和流程控制,今天我们就来一起学习下它们。

for

循环语句用于重复执行一段代码。
for是 Go 中唯一可用的循环。Go 没有其他语言(如 C)中存在的 while 或 do while 循环。

for initialisation; condition; post {  
}

初始化语句将只执行一次。循环初始化后,将检查条件。如果条件评估为真,则将执行内部循环的主体{ },然后执行 post 语句。post 语句将在循环的每次成功迭代后执行。post语句执行后,条件会被重新检查。如果为真,循环将继续执行,否则 for 循环终止。

在 Go 中,初始化、条件和发布这三个组件都是可选的。让我们看一个例子来更好地理解 for 循环。

让我们编写一个程序,使用 for 循环打印从 1 到 10 的所有数字。

package main
 
import (  
    "fmt"
)
 
func main() {  
    for i := 1; i <= 10; i++ {
        fmt.Printf(" %d",i)
    }
}

在上面的程序中,i被初始化为 1。条件语句将检查 if i <= 10。如果条件为真,则打印 i 的值,否则终止循环。post 语句在每次迭代结束时将i 递增 1。一旦i大于 10,循环终止。

上面的程序将打印1 2 3 4 5 6 7 8 9 10

在 for 循环中声明的变量仅在循环范围内可用。因此i不能在 for 循环体之外访问。

break语句

break语句用于在 for 循环完成正常执行之前突然终止 for 循环,并将控件移动到 for 循环之后的代码行。

让我们编写一个程序,使用 break 打印从 1 到 5 的数字。

package main
 
import (  
    "fmt"
)
 
func main() {  
    for i := 1; i <= 10; i++ {
        if i > 5 {
            break // 如果 i > 5 就跳出
        }
        fmt.Printf("%d ", i)
    }
    fmt.Printf("\nline after for loop")
}

在上面的程序中,每次迭代都会检查 i 的值。如果 i 大于 5 则break执行并终止循环。然后执行 for 循环之后的 print 语句。上面的程序会输出,

1 2 3 4 5  
line after for loop 

continue

continue语句用于跳过 for 循环的当前迭代。在 continue 语句之后出现在 for 循环中的所有代码都不会在当前迭代中执行。循环将继续进行下一次迭代。

让我们编写一个程序,使用 continue 打印从 1 到 10 的所有奇数。

package main
 
import (  
    "fmt"
)
 
func main() {  
    for i := 1; i <= 10; i++ {
        if i%2 == 0 {
            continue
        }
        fmt.Printf("%d ", i)
    }
}

在上面的程序中,该行if i%2 == 0检查 i 除以 2 的余数是否为 0。如果为零,则数字为偶数,continue执行语句,控制移至循环的下一次迭代。因此,将不会调用 continue 之后的 print 语句,并且循环继续进行下一次迭代。上述程序的输出是1 3 5 7 9

注意:

  • break 会结束所有循环。
  • continue 会跳过当前循环直接进入下一次循环。

if else 语句

if是一个具有布尔条件的语句,如果该条件的计算结果为真 ,它将执行一段代码true。如果条件评估为 ,它会执行一个备用的 else 块false。在本教程中,我们将了解使用 if 语句的各种语法和方法。

if是一个具有布尔条件的语句,如果该条件为真,则执行第一个代码块。如果条件求值为false,则执行另一个else块。在本教程中,我们将学习if语句的各种语法和使用方法。

if 主要用于条件判断,语法为:

if 条件 {
  # 业务代码
}

先看一个简单例子:

package main

import "fmt"

func main() {
    age := 7

    if age > 6 {
        fmt.Println("good")
    }
}

在上面的程序中,第8行age > 6为条件,求age是否大于 6。如果是,将打印good文本并且返回程序。

我们可以在条件中使用 &|| 来进行组合判断:

package main

import "fmt"

func main() {
    age := 7

    if age > 6 && age <= 12 {
        fmt.Println("It's primary school")
    }
}

我们还可以使用 ifelse ifelse 来实现多分支的条件判断:

package main

import "fmt"

func main() {
    age := 13

    if age > 6 && age <= 12 {
        fmt.Println("It's primary school")
    } else if age > 12 && age <= 15 {
        fmt.Println("It's middle school")
    } else {
        fmt.Println("It's high school")
    }
}

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语句返回条件为真

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")
 
}

switch

switch 是一个条件语句,它计算表达式并将其与可能匹配的列表进行比较并执行相应的代码块。它可以被认为是替换复杂if else从句的惯用方式。 例如:

package main

import "fmt"

func main() {
    age := 10

    switch age {
    case 5:
        fmt.Println("The age is 5")
    case 7:
        fmt.Println("The age is 7")
    case 10:
        fmt.Println("The age is 10")
    default:
        fmt.Println("The age is unkown")
    }
}

注意:在 Go 中 switch 只要匹配中了就会中止剩余的匹配项,这和 Java 很大不一样,它需要使用 break 来主动跳出。

switchcase 条件可以是多个值,例如:

package main

import "fmt"

func main() {
    age := 7

    switch age {
    case 7, 8, 9, 10, 11, 12:
        fmt.Println("It's primary school")
    case 13, 14, 15:
        fmt.Println("It's middle school")
    case 16, 17, 18:
        fmt.Println("It's high school")
    default:
        fmt.Println("The age is unkown")
    }
}

注意: 同一个 case 中的多值不能重复。

switch 还可以使用 if..else 作为 case 条件,例如:

package main

import "fmt"

func main() {
    age := 7

    switch {
    case age >= 6 && age <= 12:
        fmt.Println("It's primary school")
    case age >= 13 && age <= 15:
        fmt.Println("It's middle school")
    case age >= 16 && age <= 18:
        fmt.Println("It's high school")
    default:
        fmt.Println("The age is unkown")
    }
}

小技巧: 使用 switchinterface{} 进行断言,例如:

package main

import "fmt"

func checkType(i interface{}) {
    switch v := i.(type) {
    case int:
        fmt.Printf("%v is an in\n", v)
    case string:
        fmt.Printf("%v is a string\n", v)
    default:
        fmt.Printf("%v's type is unkown\n", v)
    }
}

func main() {
    checkType(8)
    checkType("hello, world")
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

麻凡_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值