Go -- 流程控制(if判断和for循环)

一、if判断

  • Go语言中if条件判断的格式如下:
if 表达式1 {
    分支1
} else if 表达式2 {
    分支2
} else{
    分支3
}

当表达式1的结果为true时,执行分支1,否则判断表达式2,如果满足则执行分支2,都不满足时,则执行分支3。 if判断中的else if和else都是可选的,可以根据实际需要进行选择。
Go语言规定与if匹配的左括号{必须与if和表达式放在同一行,{放在其他位置会触发编译错误。 同理,与else匹配的{也必须与else写在同一行,else也必须与上一个if或else if右边的大括号在同一行。

示例:

package main

import (
	"fmt"
)

func main() {
	// 单条件判断
	level := 15
	if level > 20 {
		fmt.Println("恭喜你!!可以转职了!")
	} else {
		fmt.Println("再接再厉!!")
	}
	// 多条件判断
	age := 20
	if age > 35 {
		fmt.Println("人到中年了")
	} else if age > 18 {
		fmt.Println("青年")
	}
	// 直接在判断中声明变量,声明的变量作用域只在判断语句内,在这个判断语句外,该变量无效
	// 这种在判断语句中定义变量的好处:当条件判断语句执行结束,该变量也会被回收
	if name := "xiaoming"; name == "xiaoming" {
		fmt.Println("他是小明")
	} else {
		fmt.Println("他不是小明")
	}
}

输出结果

 E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
再接再厉!!
青年
他是小明

二、switch 和 case 循环

  • 使用switch语句可方便地对大量的值进行条件判断。
    • switch传入的变量和case的值做比较(一旦匹配上就会退出循环,后面的不做比较)

示例

package main

import (
	"fmt"
)

func switchDemo1() {
	finger := "c"
	switch finger {
	case "a":
		fmt.Println(1)
	case "b":
		fmt.Println(2)
	case "c":
		fmt.Println(3)
	default:
		fmt.Println("无效的输入!")
	}
}

func main() {
	switchDemo1()
}

输出结果

E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
3
  • 变量可以直接在switch后面定义
func switchDemo1() {
	switch finger := "b"; finger {
	case "a":
		fmt.Println(1)
	case "b":
		break
	case "c":
		fmt.Println(3)
	default:
		fmt.Println("无效的输入!")
	}
}
  • case可以匹配多个值

func switchDemo1() {
	switch finger := "d"; finger {
	case "a", "d", "h":
		fmt.Println(1)
	case "b":
		break
	case "c":
		fmt.Println(3)
	default:
		fmt.Println("无效的输入!")
	}
}
  • 在case后,可以加上判断(在switch后不传入变量,直接在case中定义判断)
package main

import (
	"fmt"
)

func switchDemo1() {
	age := 20
	switch {
	case age > 18:
		fmt.Println("成年")
	case age > 18 && age < 35:
		fmt.Println("青年")
	default:
		fmt.Println("未成年!")
	}
}

func main() {
	switchDemo1()
}

  • fallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的。(不常用,作为了解即可)
func switchDemo1() {
	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("...")
	}
}

输出结果

E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
a
b

三、for循环

1、for循环的基本写法

  • for循环的基本格式如下:
for 初始语句;条件表达式;结束语句{
    循环体语句
}

条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环。

示例:

func forDemo() {
	for i := 0; i < 10; i++ {
		fmt.Println(i)
	}
}
  • for循环的初始语句可以被忽略,但是初始语句后的分号必须要写,
    例如:
func forDemo2() {
	i := 0
	for ; i < 10; i++ {
		fmt.Println(i)
	}
}
  • for循环的初始语句和结束语句都可以省略
    例如:
func forDemo3() {
	i := 0
	for i < 10 {
		fmt.Println(i)
		i++
	}
}
  • 输出九九乘法表示例
package main

import (
	"fmt"
)

func main() {
	for i := 1; i < 10; i++ {
		for n := 1; n <= i; n++ {
			fmt.Printf("%d*%d=%d\t", n, i, i*n)
		}
		fmt.Println("")
	}
}

输出结果

E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
1*1=1
1*2=2   2*2=4
1*3=3   2*3=6   3*3=9
1*4=4   2*4=8   3*4=12  4*4=16
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

2、for无限循环(类似while死循环)

  • 在Go语言中只有for循环,没有while循环
for {
    循环体语句
}

示例:

func main() {

	i := 1
	for i < 30 {
		fmt.Println(i)
	}
}

3、for range(键值循环)

  • Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。
  • 通过for range遍历的返回值有以下规律:
    • 1、数组、切片、字符串返回索引和值。
    • 2、map返回键和值。
    • 3、通道(channel)只返回通道内的值。
package main

import (
	"fmt"
)

func main() {
	s := "abcdef"
	for i, v := range s {
		fmt.Printf("%c  ", v)
		fmt.Println(i, v)
	}
}

输出结果

E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
a  0 97
b  1 98
c  2 99
d  3 100
e  4 101
f  5 102

3、break(跳出循环)

  • break(跳出循环)
    • break语句可以结束for、switch和select的代码块。
    • break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for、switch和 select的代码块上。

3.1、跳出单次循环

示例

package main

import (
	"fmt"
)

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

输出结果

E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
1
2
3
4

3.2、跳出多次循环

方法1:利用label的方式(不建议经常使用,label使用会使代码变得难懂)

func breakDemo1() {
BREAKDEMO1:
	for i := 0; i < 3; i++ {
		for j := 'A'; j < 'Z'; j++ {
			if j == 'C' {
				break BREAKDEMO1   // 直接跳出到标签处开始执行
			}
			fmt.Printf("%v-%c\n", i, j)
		}
	}
	fmt.Println("over")
}

输出结果

E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
0-A
0-B
over

方法二:利用布尔值(推荐使用)

func breakDemo1() {
	flag := false   // 定义一个falg,充当标签
	for i := 0; i < 3; i++ {
		for j := 'A'; j < 'Z'; j++ {
			if j == 'C' {
				flag = true
				break
			}
			if flag {
				break
			}
			fmt.Printf("%v-%c\n", i, j)
		}
	}
	fmt.Println("over")
}

输出结果

E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
0-A
0-B
over

4、continue(跳过此次,后面的继续执行)

  • continue(跳过此次,后面的继续执行)
    • continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。

示例:

package main

import (
	"fmt"
)

func main() {
	for i := 1; i < 6; i++ {
		if i == 3 {
			continue
		}
		fmt.Println(i)
	}
}

输出结果

E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
1
2
4
5

注意:使用continue时,不能使用下面这种用法,程序会hung住

func main() {
	i := 1
	for i < 6 {
		if i == 3 {
			continue  // 当i=3时,程序会跳过,回到上面的循环中,但是此时i依旧是3,所以会一直hung住
		}
		fmt.Println(i)
		i++
	}
}
  • 在 continue语句后添加标签时,表示开始标签对应的循环。
    示例1:
package main

import (
	"fmt"
)

func continueDemo() {
forloop1:
	for i := 0; i < 3; i++ {
		for j := 0; j < 3; j++ {
			if i == 1 || j == 1 {
				continue forloop1  // 满足条件,就会跳转到forloop1标签位置继续执行
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
}

func main() {
	continueDemo()
}

输出结果

E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
0-0
2-0

示例2:

package main

import (
	"fmt"
)

func continueDemo() {
	for i := 0; i < 3; i++ {
	forloop2:
		for j := 0; j < 3; j++ {
			if i == 1 || j == 1 {
				continue forloop2 // 满足条件,就会跳转到forloop2标签位置继续执行
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
}

func main() {
	continueDemo()
}

输出结果

E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
0-0
0-2
0-3

4、goto语句(不建议经常使用)

  • goto语句通过标签进行代码间的无条件跳转。
  • goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。
  • Go语言中使用goto语句能简化一些代码的实现过程。 例如双层嵌套的for循环要退出时(和break多重循环退出类似)
func gotoDemo1() {
	for i := 0; i < 10; i++ {
		for j := 0; j < 10; j++ {
			if j == 2 {
				// 设置退出标签
				goto GotoTag
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
	return
	// 标签
GotoTag:
	fmt.Println("结束for循环")
}

输出结果

E:\GoProject\src\gitee.com\LTP\day01\变量、常量> go run .\main.go
0-0
0-1
结束for循环
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值