三、Go语言控制语句

举报
毛利 发表于 2021/07/15 03:13:25 2021/07/15
【摘要】 @Author:Runsen Go的语法很简单,其实也有一部分就是因为Go语言中控制语句关键字很少,但却完全满足了我们的需求,下面我列举了Go语言中常用的控制语言,对每一个控制语句都进行代码展示与解释。 文章目录 if 语句switch语句for循环goto语句 if 语句 依据条件是否满足确定执行哪个分支。 语法: if 条件 1 { 分支 ...

@Author:Runsen

Go的语法很简单,其实也有一部分就是因为Go语言中控制语句关键字很少,但却完全满足了我们的需求,下面我列举了Go语言中常用的控制语言,对每一个控制语句都进行代码展示与解释。

if 语句

依据条件是否满足确定执行哪个分支。
语法:

if 条件 1 {
  分支 1
} else if 条件 2 {
  分支 2
} else if 条件 ... {
  分支 ...
} else {
  分支 else
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意:Go语言规定与if匹配的左括号{必须与if和表达式放在同一行,{放在其他位置会触发编译错误。同理,与else匹配的{也必须与else写在同一行,else也必须与上一个ifelse if右边的大括号在同一行。

package main

import (
	"fmt"
)

func main() {
	age := 20
	if age > 18 {
		fmt.Println("你已经是成年人了")
	} else if age > 6 {
		fmt.Println("你还是一个小屁孩")
	} else {
		fmt.Println("你还是一个小娃娃")
	}
}

你已经是成年人了

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

switch语句

有时候我们有大量if…else if…else语句,这样写不美观,也不够直观。对于这类需求,Go语言用switch 语句对其进行条件判断,其基本语法如下:

switch 判断变量 { case 表达式1: 语句1 case 表达式2: 语句2 ...... default: 默认语句
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

例子:我们根据一个人的年龄去判断属于哪一年龄段。

package main

import "fmt"

func main() {
	age := 18
	switch age {
	case 60:
		fmt.Print("老人")
	case 30:
		fmt.Print("中年")
	case 18:
		fmt.Print("青年")
	case 6:
		fmt.Print("少年")
	default:
		fmt.Print("你是一个人才")
	}
}

青年

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

注意:Go语言规定每个switch只能有一个default分支,还有case没有数值大于小于的比较

这里需要补充一个:fallthrough。fallthrough可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的。如下:

package main

import "fmt"

func main() {
  s := "a"
  switch {
  case s == "a": fmt.Println("a") fallthrough
  case s == "b": fmt.Println("b")
  case s == "c": fmt.Println("c")
  default: fmt.Println("...")
  }
} 
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

这样在执行s == "a"的时候会同时执行s == "b"

for循环

在Go语言不再使用 do 或 while 循环,只有一种循环语句,那就是for循环 ,其基本格式如下:

for 初始语句;条件表达式;结束语句{ 循环体
}

  
 
  • 1
  • 2
  • 3

下面举一个例子,比如输出0到9。

package main

import "fmt"

func main() {
	for i := 0; i < 10; i++ {
		fmt.Println(i)
	}
}

0
1
2
3
4
5
6
7
8
9

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

如果for后面不跟任何语句,则是无限循环,如下所示。

package main

import "fmt"

func main() {
	for {
		fmt.Println(我们学习Go")
	}
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。通过for range遍历的返回值有以下规律:

  • 数组、切片、字符串返回索引和值。
  • map返回键和值。
  • 通道(channel)只返回通道内的值。

下面举一个例子,遍历字符串,如下所示。

package main

import "fmt"

func main() {
  s := "Hello"
  for i, v := range s { fmt.Printf("%d - %c \n", i, v)
  }
}

0 - H 
1 - e 
2 - l 
3 - l 
4 - o 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

如果我们不需要索引值,我们可以用匿名变量去接收,如下所示。

package main

import "fmt"

func main() {
	s := "Hello"
	for _, v := range s {
		fmt.Printf("%c \n", v)
	}
}

H 
e 
l 
l 
o 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

还有两个关键词,跳出循环有break和continue,break和continue和其他编程语言相同。

break:跳出当前循环

package main

import "fmt"

func main() {
	for i := 0; i < 10; i++ {
		if i == 5 { break
		}
		fmt.Println(i)
	}
}

0
1
2
3
4

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

continue:跳出本次循环

package main

import "fmt"

func main() {
  for i := 0; i < 10; i++ { if i == 5 { continue } fmt.Println(i)
  }
}

0
1
2
3
4
6
7
8
9

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

goto语句

在双层嵌套的for循环,经常见到goto语句。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。

转到goto语句的语法如下:

goto label;
..
label: statement;

  
 
  • 1
  • 2
  • 3

在这里,label可以是除去关键字任何纯文本,它可以在任何地方设置在Go程序的上方或下方,以使用goto语句。

这边举一个例子,用 goto 的方式来实现一个打印 10到19的循环。

package main

import "fmt"

func main() { var a int = 10 LOOP: for a < 20 { if a == 15 { a = a + 1 goto LOOP } fmt.Printf("value of a: %d\n", a) a++ }  
}

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 16
value of a: 17
value of a: 18
value of a: 19

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

文章来源: maoli.blog.csdn.net,作者:刘润森!,版权归原作者所有,如需转载,请联系作者。

原文链接:maoli.blog.csdn.net/article/details/107817291

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。