go 语言基础之流程控制
流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”。
Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。
if else(分支结构)
if条件判断基本写法
Go语言中if条件判断的格式如下:
if 表达式1 { 分支1 } else if 表达式2 { 分支2 } else{ 分支3 }
示例
package main
import (
//"flag"
"fmt"
)
//定义命令行参数
func main() {
age := 19
if age >18 {
fmt.Println("你已经成年")
}else{
fmt.Println("写作业")
}
}
// 执行结果
// PS D:\golang\goproject\src\lnhgo> go run day1\demo19\main.go
// 你已经成年
if条件判断特殊写法
if score := 65; score >= 90 {
fmt.Println("A")
} else if score > 75 {
fmt.Println("B")
} else {
fmt.Println("C")
}
for(循环结构)
for 初始语句;条件表达式;结束语句{
循环体语句
}
条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环。
for i := 0; i < 10; i++ {
fmt.Println(i)
}
for循环的初始语句可以被忽略,但是初始语句后的分号必须要写,
i := 0
for ; i < 10; i++ {
fmt.Println(i)
}
for循环的初始语句和结束语句都可以省略
i := 0
for i < 10 {
fmt.Println(i)
i++
}
无限循环;for循环可以通过break、goto、return、panic语句强制退出循环。
for {
循环体语句
}
for range(键值循环)
Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值。
Go1.22版本开始支持 for range 整数。
for i := range 5 {
fmt.Println(i)
}
for range 2 {
fmt.Println("《Go语言之路》上市啦!")
}
结果
0 1 2 3 4 《Go语言之路》上市啦! 《Go语言之路》上市啦!
示例2 跳出循环break
package main
import (
"fmt"
)
func main(){
for i:=0;i<10;i++{
if i == 5{
break
}
fmt.Println(i)
}
}
//执行结果
// PS D:\golang\goproject\src\lnhgo> go run day2\demo01\main.go
// 0
// 1
// 2
// 3
// 4
跳过这次循环
package main
import (
"fmt"
)
func main(){
for i:=0;i<10;i++{
if i == 5{
continue
}
fmt.Println(i)
}
}
//执行结果
// PS D:\golang\goproject\src\lnhgo> go run day2\demo01\main.go
// 0
// 1
// 2
// 3
// 4
// 6
// 7
// 8
// 9
switch case
使用switch语句可方便地对大量的值进行条件判断。
finger := 3
switch finger {
case 1:
fmt.Println("大拇指")
case 2:
fmt.Println("食指")
case 3:
fmt.Println("中指")
case 4:
fmt.Println("无名指")
case 5:
fmt.Println("小拇指")
default:
fmt.Println("无效的输入!")
}
Go语言规定每个switch只能有一个default分支。
一个分支可以有多个值,多个case值中间使用英文逗号分隔。
package main
import (
"fmt"
)
func main(){
// for i:=0;i<10;i++{
// if i == 5{
// continue
// }
// fmt.Println(i)
// }
switch n:=7;n{
case 1,2,3,4:
fmt.Printf("你好")
case 5,6,7,8:
fmt.Printf("您好")
}
}
//执行结果
// PS D:\golang\goproject\src\lnhgo> go run day2\demo01\main.go
// 您好
分支还可以使用表达式,这时候switch语句后面不需要再跟判断变量。例如:
func switchDemo4() {
age := 30
switch {
case age < 25:
fmt.Println("好好学习吧")
case age > 25 && age < 35:
fmt.Println("好好工作吧")
case age > 60:
fmt.Println("好好享受吧")
default:
fmt.Println("活着真好")
}
}
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("...")
}
}
//执行结果
PS D:\golang\goproject\src\lnhgo> go run day2\demo01\main.go
a
b
goto(跳转到指定标签)
package main
import (
"fmt"
)
func main(){
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 2 {
// 设置退出标签
goto breakTag
}
fmt.Printf("%v-%v\n", i, j)
}
}
return
// 标签
breakTag:
fmt.Println("结束for循环")
}
//执行结果
// PS D:\golang\goproject\src\lnhgo> go run day2\demo02\main.go
// 0-0
// 0-1
// 结束for循环
break(跳出循环)
break语句可以结束for、switch和select的代码块。
break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for、switch和 select的代码块上。 举个例子:
func breakDemo1() {
BREAKDEMO1:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 2 {
break BREAKDEMO1
}
fmt.Printf("%v-%v\n", i, j)
}
}
fmt.Println("...")
}
示例
package main
import (
"fmt"
//"honnef.co/go/tools/simple/s1007"
)
func main(){
for i:=1;i<=9;i++{
for x :=1;x<=i;x++{
fmt.Printf("%d*%d=%d\t",x,i,x*x)
}
fmt.Println()
}
s1 := "Hello"
s2 := "沙河"
for _,v := range s1{
fmt.Printf("%c\t",v)
}
for _,v := range s2{
fmt.Printf("%c\t",v)
}
}
/*
PS D:\golang\goproject\src\lnhgo> go run day2\demo03\main.go
1*1=1
1*2=1 2*2=4
1*3=1 2*3=4 3*3=9
1*4=1 2*4=4 3*4=9 4*4=16
1*5=1 2*5=4 3*5=9 4*5=16 5*5=25
1*6=1 2*6=4 3*6=9 4*6=16 5*6=25 6*6=36
1*7=1 2*7=4 3*7=9 4*7=16 5*7=25 6*7=36 7*7=49
1*8=1 2*8=4 3*8=9 4*8=16 5*8=25 6*8=36 7*8=49 8*8=64
1*9=1 2*9=4 3*9=9 4*9=16 5*9=25 6*9=36 7*9=49 8*9=64 9*9=81
H e l l o 沙 河
*/
switch 语句
package main
import (
"fmt"
)
func main(){
var n int
fmt.Println("输入:")
fmt.Scanln(&n)
switch n{
case 1:
fmt.Println("大拇指")
case 2:
fmt.Println("食指")
case 3:
fmt.Println("中指")
case 4:
fmt.Println("无名指")
case 5:
fmt.Println("小拇指")
default:
fmt.Println("输入有误")
}
}
/*
PS D:\golang\goproject\src\lnhgo> go run day2\demo04\main.go
输入:
7
输入有误
PS D:\golang\goproject\src\lnhgo> go run day2\demo04\main.go
输入:
3
中指
*/

浙公网安备 33010602011771号