Go语言逻辑语句的那些事儿!

if条件语句

if 语句是条件语句

  • 它根据布尔值的表达式来决定选择哪个分支执行

如果表达式的值为 true

  • 则 if 分支被执行

如果表达式的值为 false

  • 则 else 分支被执行。
1
2
3
4
5
6
7
8
func main() {
i:=10
if i >10 {
fmt.Println("i>10")
} else {
fmt.Println("i<=10")
}
}

关于 if 条件语句的使用有一些规则:

  • if 后面的条件表达式不需要使用 ()

    • 这和有些编程语言不一样,也更体现 Go 语言的简洁
  • 每个条件分支(if 或者 else)中的大括号是必须的

    • 哪怕大括号里只有一行代码
  • if 紧跟的大括号 { 不能独占一行,else 前的大括号 } 也不能独占一行

    • 否则会编译不通过
  • if……else 条件语句中还可以增加多个 else if,增加更多的条件分支。

1
2
3
4
5
6
7
8
9
10
func main() {
i:=6
if i >10 {
fmt.Println("i>10")
} else if i>5 && i<=10 {
fmt.Println("5<i<=10")
} else {
fmt.Println("i<=5")
}
}

和其他编程语言不同,在 Go 语言的 if 语句中,可以有一个简单的表达式语句

  • 并将该语句和条件语句使用分号 ; 分开
1
2
3
4
5
6
7
8
9
func main() {
if i:=6; i >10 {
fmt.Println("i>10")
} else if i>5 && i<=10 {
fmt.Println("5<i<=10")
} else {
fmt.Println("i<=5")
}
}

在 if 关键字之后,i>10 条件语句之前

  • 通过分号 ; 分隔被初始化的 i:=6。

这个简单语句主要用来在 if 条件判断之前做一些初始化工作

  • 可以发现输出结果是一样的。

switch选择语句

1
2
3
4
5
6
7
8
9
switch i:=6;{

case i>10:
fmt.Println("i>10")
case i>5 && i<=10:
fmt.Println("5<i<=10")
default:
fmt.Println("i<=5")
}

switch 语句同样也可以用一个简单的语句来做初始化

  • 同样也是用分号 ; 分隔。

每一个 case 就是一个分支,分支条件为 true 该分支才会执行

  • 而且 case 分支后的条件表达式也不用小括号 () 包裹。

在 Go 语言中,switch 的 case 从上到下逐一进行判断:

一旦满足条件,立即执行对应的分支并返回,其余分支不再做判断。

也就是说 Go 语言的 switch 在默认情况下,case 最后自带 break。

这和其他编程语言不一样

  • 比如 C 语言在 case 分支里必须要有明确的 break 才能退出一个 case。

Go 语言的这种设计就是为了防止忘记写 break 时,下一个 case 被执行。

那么如果有需要,的确需要执行下一个紧跟的 case 怎么办呢?

Go 语言提供了 fallthrough 关键字。

现在看个例子,如下面的代码所示:

1
2
3
4
5
6
7
8
9
switch j:=1;j {

case 1:
fallthrough
case 2:
fmt.Println("1")
default:
fmt.Println("没有匹配")
}

以上示例运行会输出 1,如果省略 case 1

  • 后面的 fallthrough,则不会有任何输出。

当 switch 之后有表达式时,case 后的值就要和这个表达式的结果类型相同:

比如这里的 j 是 int 类型,那么 case 后就只能使用 int 类型

  • 如示例中的 case 1、case 2。

如果是其他类型,比如使用 case a ,会提示类型不匹配,无法编译通过。

而对于 switch 后省略表达式的情况:

整个 switch 结构就和 if……else 条件语句等同了。

switch 后的表达式也没有太多限制,是一个合法的表达式即可

  • 也不用一定要求是常量或者整数。

你甚至可以像如下代码一样,直接把比较表达式放在 switch 之后

1
2
3
4
5
6
7
switch 2>1 {

case true:
fmt.Println("2>1")
case false:
fmt.Println("2<=1")
}

for循环语句

1
2
3
4
5
6
7
sum:=0

for i:=1;i<=100;i++ {
sum+=i
}

fmt.Println("the sum is",sum)

其中:

  • 第一部分是一个简单语句,一般用于 for 循环的初始化

    • 比如这里声明了一个变量,并对 i:=1 初始化
  • 第二部分是 for 循环的条件,也就是说,它表示 for 循环什么时候结束。

    • 这里的条件是 i<=100
  • 第三部分是更新语句,一般用于更新循环的变量

    • 比如这里 i++,这样才能达到递增循环的目的。
1
2
3
4
5
6
7
8
9
10
sum:=0

i:=1

for i<=100 {
sum+=i
i++
}

fmt.Println("the sum is",sum)

这个示例和上面的 for 示例的效果是一样的,但是这里的 for 后只有 i<=100 这一个条件语句

  • 也就是说,它达到了 while 的效果。

在 Go 语言中,同样支持使用 continue、break 控制 for 循环:

  • continue 可以跳出本次循环,继续执行下一个循环。

  • break 可以跳出整个 for 循环

    • 哪怕 for 循环没有执行完,也会强制终止。
1
2
3
4
5
6
7
8
9
10
11
12
13
sum:=0

i:=1

for {
sum+=i
i++
if i>100 {
break
}
}

fmt.Println("the sum is",sum)