go语言中的流程管制
本文视频教程地址:https://www.bilibili.com/vide...
go语言中的条件
条件语句是用来判断给定的条件是否满足(表达式值是否为true
或者false
),并依据判断的后果(真或假)决定执行的语句,go语言中的条件语句也是这样的。
go语言中的条件语句蕴含如下几种状况
- if 语句:
if
语句 由一个布尔表达式后紧跟一个或多个语句组成。 - if...else 语句:
if
语句 后能够应用可选的else
语句,else
语句中的表达式在布尔表达式为false
时执行。 - if 嵌套语句: 你能够在
if
或else if
语句中嵌入一个或多个if
或else if
语句。 - switch 语句:
switch
语句用于基于不同条件执行不同动作。 - select 语句:
select
语句相似于switch
语句,然而select
会随机执行一个可运行的case
。如果没有case
可运行,它将阻塞,直到有case
可运行。
go语言中的循环语句
go语言中的循环只有for循环,去除了while
、do while
循环,应用起来更加简洁。
- for循环。
- for range循环。
go语言中的流程管制关键字
- break
- continue
- goto
golang中的if语句
go语言中的if语句和其余语言中的相似,都是依据给定的条件表达式运算后果来,判断执行流程。
go语言if语句语法
if 布尔表达式 { /* 在布尔表达式为 true 时执行 */}
留神:在go语言中 布尔表达式不必应用括号。
go语言if语句实例演示
依据布尔值flag判断
import "fmt"func test1() { var flag = true if flag { fmt.Println("flag is true") } fmt.Printf("程序运行完结")}func main() { test1()}
程序运行后果
flag is true程序运行完结
依据年龄判断是否成年
package mainimport "fmt"func test2() { var age = 20 if age > 18 { fmt.Println("你是成年人") } fmt.Printf("程序运行完结")}func main() { test2()}
程序运行后果
你是成年人程序运行完结
初始变量能够申明在布尔表达式外面,留神它的作用域
func test3() { if age := 20; age > 18 { fmt.Println("你是成年人") } fmt.Printf("程序运行完结")}func main() { // test1() // test2() test3()}
程序运行后果
你是成年人程序运行完结
留神:不能应用0或非0示意虚实
func test4() { var i = 1 if i { // 编译失败 fmt.Println("here") } fmt.Printf("程序运行完结")}
go语言if语句应用提醒:
- 不需应用括号将条件蕴含起来
- 大括号
{}
必须存在,即便只有一行语句 - 左括号必须在
if
或else
的同一行 - 在
if
之后,条件语句之前,能够增加变量初始化语句,应用;
进行分隔
golang中的if else语句
go语言中的if else语句能够依据给定条件二选一。
go语言的if else语句语法
if 布尔表达式 { /* 在布尔表达式为 true 时执行 */} else { /* 在布尔表达式为 false 时执行 */}
go语言if else语句实例
比拟两个数的大小
package mainimport "fmt"func f1() { a := 1 b := 2 if a > b { fmt.Printf("\"a>b\": %v\n", "a>b") } else { fmt.Printf("\"a<=b\": %v\n", "a<b") }}func main() { f1()}
判断一个数是奇数还是偶数
func f2() { var s int fmt.Println("输出一个数字:") fmt.Scan(&s) if s%2 == 0 { fmt.Print("s 是偶数\n") } else { fmt.Print("s 不是偶数\n") } fmt.Print("s 的值是:", s)}
判断一个人是否成年
func f3() { age := 20 if age >= 18 { fmt.Println("你是成年人") } else { fmt.Println("你还未成年") }}
非凡写法,在if后面增加执行语句
func f4() { if age := 20; age >= 18 { fmt.Println("你是成年人") } else { fmt.Println("你还未成年") }}
go语言if语句应用提醒:
- 不需应用括号将条件蕴含起来
- 大括号
{}
必须存在,即便只有一行语句 - 左括号必须在
if
或else
的同一行 - 在
if
之后,条件语句之前,能够增加变量初始化语句,应用;
进行分隔
golang中的if else if语句
go语言if语句能够进行多重嵌套应用,进行多重判断。
go语言中的if else if语法
if 布尔表达式1 { // do something} else if 布尔表达式2 { // do something else}else { // catch-all or default}
go语言中的if else if语法实例
依据分数判断等级
func f5() { score := 80 if score >= 60 && score <= 70 { fmt.Println("C") } else if score > 70 && score <= 90 { fmt.Println("B") } else { fmt.Println("A") }}
程序运行后果
B
同样也能够写成这样
func f5() { if score := 80; score >= 60 && score <= 70 { fmt.Println("C") } else if score > 70 && score <= 90 { fmt.Println("B") } else { fmt.Println("A") }}
输出星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则持续判断第二个字母
func f6() { // Monday Tuesday Wednesday Thursday Friday Saturday Sunday var c string fmt.Println("输出一个字符:") fmt.Scan(&c) if c == "S" { fmt.Println("输出第二个字符:") fmt.Scan(&c) if c == "a" { fmt.Println("Saturday") } else if c == "u" { fmt.Println("Sunday") } else { fmt.Println("输出谬误") } } else if c == "F" { fmt.Println("Friday") } else if c == "M" { fmt.Println("Monday") } else if c == "T" { fmt.Println("输出第二个字符:") fmt.Scan(&c) if c == "u" { fmt.Println("Tuesday") } else if c == "h" { fmt.Println("Thursday") } else { fmt.Println("输出谬误") } } else if c == "W" { fmt.Println("Wednesday") } else { fmt.Println("输出谬误") }}
golang中嵌套if语句
go语言if语句能够嵌套多级进行判断。
go语言if嵌套语法
if 布尔表达式 1 { /* 在布尔表达式 1 为 true 时执行 */ if 布尔表达式 2 { /* 在布尔表达式 2 为 true 时执行 */ }}
go语言if嵌套实例
判断三个数的大小
package mainimport "fmt"// a>b a>c a// b>a b>c b else cfunc f1() { a := 100 b := 200 c := 3 if a > b { if a > c { fmt.Println("a最大") } } else { if b > c { fmt.Println("b最大") } else { fmt.Println("c最大") } }}func main() { f1()}
判断男生还是女生,还有是否成年
func f2() { // 判断男女生及年龄 gender := "女生" age := 16 if gender == "男生" { fmt.Println("男生") if age > 18 { fmt.Println("成年") } else { fmt.Println("未成年") } } else { fmt.Println("女生") if age > 18 { fmt.Println("成年") } else { fmt.Println("未成年") } }}
golang switch语句
go语言中的switch
语句,能够非常容易的判断多个值的状况。
go语言中switch语句的语法
switch var1 { case val1: ... case val2: ... default: ...}
go语言中switch
语句实例
判断问题
func f() { grade := "A" switch grade { case "A": fmt.Println("优良") case "B": fmt.Println("良好") default: fmt.Println("个别") }}
运行后果
优良
多条件匹配
go语言switch
语句,能够同时匹配多个条件,两头用逗号分隔,有其中一个匹配胜利即可。
func f() { day := 3 switch day { case 1, 2, 3, 4, 5: fmt.Println("工作日") case 6, 7: fmt.Println("休息日") }}
运行后果
工作日
case能够是条件表达式
func f() { score := 90 switch { case score >= 90: fmt.Println("享受假期") case score < 90 && score >= 80: fmt.Println("好好学习吧!") default: fmt.Println("玩命学习!") }}
运行后果
享受假期
fallthrough
能够能够执行满足条件的下一个case
func f3() { a := 100 switch a { case 100: fmt.Println("100") fallthrough case 200: fmt.Println("200") case 300: fmt.Println("300") default: fmt.Println("other") }}
运行后果
100200
go语言中switch
语句的注意事项
- 反对多条件匹配
- 不同的
case
之间不应用break
分隔,默认只会执行一个case
。 - 如果想要执行多个
case
,须要应用fallthrough
关键字,也可用break
终止。 - 分支还能够应用表达式,例如:
a>10
.
golang for循环语句
go语言中的for
循环,只有for
关键字,去除了像其余语言中的while
和do while
.
go语言for循环语法
for 初始语句;条件表达式;完结语句{ 循环体语句}
留神:for表达式不必加括号
go语言for循环实例
循环输入1到10
func f() { for i := 1; i <= 10; i++ { fmt.Printf("i: %v\n", i) }}
运行后果
i: 1i: 2i: 3i: 4i: 5i: 6i: 7i: 8i: 9i: 10
初始条件,能够写到里面
func f() { i := 1 for ; i <= 10; i++ { fmt.Printf("i: %v\n", i) }}
运行后果
i: 1i: 2i: 3i: 4i: 5i: 6i: 7i: 8i: 9i: 10
初始条件和完结条件都能够省略
func f() { i := 1 // 初始条件 for i <= 10 { fmt.Printf("i: %v\n", i) i++ // 完结条件 }}
运行后果
i: 1i: 2i: 3i: 4i: 5i: 6i: 7i: 8i: 9i: 10
这种状况相似其余语言中的while
循环
永真循环
func f() { for { fmt.Println("我始终在执行~") }}func main() { f()}
运行后果
我始终在执行~我始终在执行~我始终在执行~我始终在执行~我始终在执行~我始终在执行~我始终在执行~我始终在执行~我始终在执行~我始终在执行~我始终在执行~我始终在执行~我始终在执行~我始终在执行~......
for循环能够通过break
、goto
、return
、panic
语句强制退出循环。
golang for range循环
Go语言中能够应用for range
遍历数组、切片、字符串、map 及通道(channel)。 通过for range
遍历的返回值有以下法则:
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值。
go语言for range实例
循环数组
func f() { var a = [5]int{1, 2, 3, 4, 5} for i, v := range a { fmt.Printf("i: %d, v: %v\n", i, v) }}func main() { f()}
运行后果
i: 0, v: 1i: 1, v: 2i: 2, v: 3i: 3, v: 4i: 4, v: 5
循环字符串
func f() { var s = "多课网,go教程" for i, v := range s { fmt.Printf("i: %d, v: %c\n", i, v) } // %c 依照字符输入}func main() { f()}
运行后果
i: 0, v: 多i: 3, v: 课i: 6, v: 网i: 9, v: ,i: 12, v: gi: 13, v: oi: 14, v: 教i: 17, v: 程
循环切片
func f() { var s = []int{1, 2, 3, 4, 5} for i, v := range s { fmt.Printf("i, %d, v: %v\n", i, v) }}func main() { f()}
循环map
func f() { m := make(map[string]string) m["name"] = "tom" m["age"] = "20" m["email"] = "tom@gmail.com" for k, v := range m { fmt.Printf("k: %v, v: %v\n", k, v) }}func main() { f()}
运行后果
k: email, v: tom@gmail.comk: name, v: tomk: age, v: 20
golang流程管制关键字break
break
语句能够完结for
、switch
和select
的代码块。
go语言应用break注意事项
- 独自在
select
中应用break
和不应用break
没有啥区别。 - 独自在表达式
switch
语句,并且没有fallthough
,应用break
和不应用break
没有啥区别。 - 独自在表达式
switch
语句,并且有fallthough
,应用break
可能终止fallthough
前面的case
语句的执行。 - 带标签的
break
,能够跳出多层select/ switch
作用域。让break
更加灵便,写法更加简略灵便,不须要应用控制变量一层一层跳出循环,没有带break
的只能跳出以后语句块。
go语言break关键字实例
跳出for循环
func f() { for i := 0; i < 10; i++ { if i == 5 { break // 退出循环 } fmt.Printf("i: %v\n", i) }}func main() { f()}
运行后果
i: 0i: 1i: 2i: 3i: 4
跳出switch
func f() { i := 2 switch i { case 1: fmt.Println("等于1") break case 2: fmt.Println("等于2") break fallthrough case 3: fmt.Println("等于3") break default: fmt.Println("不关怀") break }}func main() { f()}
运行后果
等于2
正文掉fallthrough
下面的break
,运行后果
等于2等于3
跳转到标签处
func f() {MY_LABEL: for i := 0; i < 10; i++ { if i == 5 { break MY_LABEL } fmt.Printf("%v\n", i) } fmt.Println("end...")}func main() { f()}
运行后果
01234end...
golang关键字continue
continue
只能用在循环中,在go中只能用在for
循环中,它能够终止本次循环,进行下一次循环。
在 continue
语句后增加标签时,示意开始标签对应的循环。
go语言continue
实例
输入1到10之间的偶数
func f() { for i := 0; i < 10; i++ { if i%2 == 0 { fmt.Printf("i: %v\n", i) } }}func main() { f()}
运行后果
i: 0i: 2i: 4i: 6i: 8
跳转到label
func f() { // MY_LABEL: for i := 0; i < 5; i++ { MY_LABEL: for j := 0; j < 5; j++ { if i == 2 && j == 2 { continue MY_LABEL } fmt.Printf("i=%d,j=%d\n", i, j) } }}func main() { f()}
运行后果
i=0,j=0i=0,j=1i=0,j=2i=0,j=3i=0,j=4i=1,j=0i=1,j=1i=1,j=2i=1,j=3i=1,j=4i=2,j=0i=2,j=1i=2,j=3i=2,j=4i=3,j=0i=3,j=1i=3,j=2i=3,j=3i=3,j=4i=4,j=0i=4,j=1i=4,j=2i=4,j=3i=4,j=4