上一篇内容:Golang入门
流程控制
单分支控制
if语法格式:
// if 后面可以有一个语句
// 例如 if err:revover(); err!=nil {
if 条件表达式 {
// 执行代码块
}
代码示例:
package main
import "fmt"
func main() {
var age int
fmt.Println("请输入年龄:")
fmt.Scanln(&age )
if age > 18{
fmt.Println("你年龄大于18,要对自己的行为负责!")
}
}
打印输出:
请输入年龄:
21
你年龄大于18,要对自己的行为负责!
双分支语句
if-else语法格式:
if 条件表达式 {
// 执行代码块
}else{
// 执行代码块
}
示例代码:
package main
import "fmt"
func main() {
var age int
fmt.Println("请输入年龄:")
fmt.Scanln(&age )
if age > 18{
fmt.Println("你年龄大于18,要对自己的行为负责!")
}else{
fmt.Println("你的年龄不大这次放过你了")
}
}
打印输出:
请输入年龄:
13
你的年龄不大这次放过你了
多分支判断
if else if
package main
import "fmt"
func main() {
var score int
fmt.Println("请输入成绩:")
fmt.Scanln(&score)
if score > 18{
fmt.Println("你年龄大于18,要对自己的行为负责!")
}else if score > 80 && score <= 90{
fmt.Println("你的年龄不大这次放过你了")
}else if score >= 60 && score <=80{
fmt.Println("奖励一个 ipad")
}else{
fmt.Println("什么都不奖励")
}
}
打印输出:
请输入成绩:
12
什么都不奖励
switch…case 语句
- case/switch 后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
-
default 语句不是必须的。
-
switch 后面可以不带表达式,类似
if-else分支来使用。
switch 和 if 的比较:
- 如果判断的具体数据不多,并且符合整数、浮点数、字符、字符串这几种类型,建议使用 switch 语句,简洁高效。
- 其他情况:对区间判断和结果为 bool 类型的判断,使用 if,if 使用范围更广。
循环语句
For 循环的表现形式
- 传统意义上的
for循环。
Golang 里面的 for 循环和和传统的没太大的语法差别。而循环条件是返回一个布尔表达式。
package main
import (
"fmt"
)
func main() {
for i:=1; i < 10; i++ {
fmt.Println("hello world")
}
}
这里最终运行完成之后, i 的值为 11
- for 循环的第二种方式:只有一个条件语句
- 将变量初始化和变量迭代写到其它位置,相当于把
;给省略了。
- 将变量初始化和变量迭代写到其它位置,相当于把
// for 循环的第二种写法
j := 1 // 循环变量初始化
for j < 10{
// 循环条件
fmt.Println("hello world~~~")
j++ // 循环变量迭代
}
- for 循环还可以什么条件都没有
这个书写形式也就是 Golang 当中 while 语句的书写形式,因此 Go 里面没有 while 或者 do while的书写形式。被整合进了 for 语句当中。
// for 循环的第三种写法,这种写法通常会配合 break 使用
k:=1
for {
if k <= 10{
fmt.Println("ok~")
}else{
break
}
k++
}
for - range表达式
假设我们现在要遍历一个字符串,传统上我们会如下进行遍历:
var s string = "qwer!"
for i := 0; i < len(s); i++ {
fmt.Printf("%c\n", s[i])
}
而通过 for-range 我们可以这么遍历:
- 对于 for-range 遍历方式而言,是按照字符方式进行遍历。
for index, value := range s{
fmt.Printf("index=%d, value=%c\n",index, value)
}
打印输出:
index=0, value=q
index=1, value=w
index=2, value=e
index=3, value=r
index=4, value=!
注意事项和细节说明:
如果我们的字符串含有中文,那么传统的遍历字符串方式,就是错误,会出现乱码。原因是传统的对字符串的遍历是按照字节来遍历,而一个汉字在 utf8 编码是对应 3 个字节。
如何解诀:
法1:需要要将 str 转成 []rune 切片。
var s string = "qwer!项炤程"
s2 := []rune(s)
for i := 0; i < len(s2); i++ {
fmt.Printf("%c\n", s2[i])
}
法2:通过 for-range 的形式来进行遍历
var s string = "qwer!项炤程"
// for range 是按照字符的方式来进行遍历的
for index, value := range s{
fmt.Printf("index=%d, value=%c\n",index, value)
}
练习
- 打印1~100之间所有是9的倍数的整数的个数及总和
package main
import (
"fmt"
)
func main() {
var count int = 0
var sum int = 0
for i:=1;i<=100;i++{
if i % 9 == 0{
count ++
sum += i
}
}
fmt.Printf("count=%v,sum=%v\n", count, sum)
}
打印输出:
count=11,sum=594
- 完成下面表达式输出:
0 + 6 = 6
1 + 5 = 6
2 + 4 = 6
3 + 3 = 6
4 + 2 = 6
5 + 1 = 6
6 + 0 = 6
var sum int = 6
for i := 0; i <=6; i ++{
fmt.Printf("%v + %v = %v\n",i,sum - i,sum)
}
break 关键字
break 用于终止 某个语句块,用于中断当前 for 循环或跳出 switch 语句:
......
break
......
}
- 随机打印 0-100 的整数,记录打印
rand.Seed(time.Now().Unix())
var count int = 0
for{
count ++
n := rand.Intn(100) + 1
fmt.Println("n = ",n)
if n == 99{
break
}
}
fmt.Printf("一共耗费:%v次",count)
打印输出:
n = 97
n = 3
...
...
n = 99
一共耗费:22次
需要注意的细节:
- break 语句出现多层嵌套的语句块中时,可以通过标签 指明要终止的是哪一层语句块
label2:
for i:=0; i< 4; i++{
// label1:
for j := 0;j < 10; j++{
if j ==2{
// break
break label2 // 输出: j = 0 \n j = 1
}
fmt.Println("j=", j)
}
}
- break 会默认跳出最近的
for循环 - break 后面可以指定标签,跳出标签对应的 for 循环。

这篇博客详细介绍了Golang的流程控制,包括单分支、双分支、多分支判断和switch...case语句,强调了switch在简洁高效方面的优势。此外,文章还深入探讨了循环语句的多种形式,如for循环,以及break、continue、goto和return的用法。接着,博客讲解了函数的概念、语法、底层分析和注意事项,包括函数的多重返回值和匿名函数。最后,提到了包、字符串处理、时间和日期的相关知识。
最低0.47元/天 解锁文章
5325

被折叠的 条评论
为什么被折叠?



