【go入门】流程控制语句

发布于:2024-10-08 ⋅ 阅读:(100) ⋅ 点赞:(0)

前言

go语言常用的流程控制有ifforswitchgoto是为了简化代码,降低重复代码而生的结构,是扩展类的流程控制。

if else

基本写法

//demo1
package main

//if 语句基本写法
import "fmt"

func main() {
	var score = 80
	if score > 90 {
		fmt.Println("优秀")
	} else if score > 75 {
		fmt.Println("良好")
	} else if score > 60 {
		fmt.Println("合格")
	} else {
		fmt.Println("继续加油!")
	}
	fmt.Println(score)
}

特殊写法

//demo2
package main

import "fmt"
//if 特殊写法
func main() {
	if score := 80; score > 90 { //初始化写在条件语句内
		fmt.Println("优秀")
	} else if score > 75 {
		fmt.Println("良好")
	} else if score > 60 {
		fmt.Println("合格")
	} else {
		fmt.Println("继续加油!")
	}
	//fmt.Println(score) //在外面打印会报错
}

for(循环结构)

go语言中的所有循环类型均用for关键字来完成。

for 基本写法

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

不写初始语句,但分号必须要加

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

不写初始语句和结束语句

这种写法相当于某些编程语言中的 while 语句。

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

无限循环(死循环)

//demo6
func main() {
	for {
		fmt.Println("hello world")
	}
}

break和continue

循环可以通过breakcontinue跳出循环

  • break是直接跳出循环
//demo7
func main() {
	for i := 0; i < 10; i++ {
		if i == 5 {
			break
		}
		fmt.Println(i)
	}
}
  • continue是跳过本次循环,进入到下一次循环
//demo8
func main() {
	for i := 0; i < 10; i++ {
		if i == 5 {
			continue
		}
		fmt.Println(i)
	}
}
  • break语句可以结束forswitchselect的代码块。break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的forswitchselect的代码块上。
//demo9
func main() {
BREAKDEMO:
	for i := 0; i < 10; i++ {
		if i == 3 {
			break BREAKDEMO
		}
		fmt.Println(i)
	}
	fmt.Println("hhh")
}
  • continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。在continue语句后添加标签时,表示开始标签对应的循环。
//demo10
func main() {
FORLOOP:
	for i := 0; i < 10; i++ {
		if i == 3 {
			continue FORLOOP
		}
		fmt.Println(i)
	}
	fmt.Println("hhh")
}

for range(键值循环)

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

  • 数组、切片、字符串返回索引和值。
  • map 返回键和值。
  • 通道(channel)只返回通道内的值。
//demo11
func main() {
	for i := range 5 {
		fmt.Println(i)
	}
}

switch和case

  • switch可以简化多个if...else代码。比如和星期有关系,一星期有七天。
    如果用if...else来写:
//demo12
func main() {
	day := 5
	if day == 1 {
		fmt.Println("Monday")
	} else if day == 2 {
		fmt.Println("Tuesday")
	} else if day == 3 {
		fmt.Println("Wednesday")
	} else if day == 4 {
		fmt.Println("Thursday")
	} else if day == 5 {
		fmt.Println("Friday")
	} else if day == 6 {
		fmt.Println("Saturday")
	} else if day == 7 {
		fmt.Println("Sunday")
	}
}

如果用switch来写:

//demo13
func main() {
	day := 5
	switch day {
	case 1:
		fmt.Println("Monday")
	case 2:
		fmt.Println("Tuesday")
	case 3:
		fmt.Println("Wednesday")
	case 4:
		fmt.Println("Thursday")
	case 5:
		fmt.Println("Friday")
	case 6:
		fmt.Println("Saturday")
	case 7:
		fmt.Println("Sunday")
	default:
		fmt.Println("Day")
	}
}
  • case还可以一次判断多个值。比如我判断是奇数还是偶数:
//demo14
func main() {
	num := 5
	switch num {
	case 1, 3, 5, 7:
		fmt.Println("奇数")
	case 2, 4, 6, 8:
		fmt.Println("偶数")
	default:
		fmt.Println("啥也不是")
	}
}

一个switch语句可以有多个case,但是只能由一个default

  • case中使用表达式
//demo15
func main() {
	age := 50
	switch { //switch后面不跟变量
	case age > 60:
		fmt.Println("老年人")
	case age < 60:
		fmt.Println("劳动者")
	default:
		fmt.Println("不是人")
	}
}

goto(跳转到指定标签)

//demo16
func main() {
	for i := 0; i < 10; i++ {
		if i == 5 {
			goto flag
		}
		fmt.Println(i)
	}
	return

flag:
	fmt.Println("结束循环")
}

网站公告

今日签到

点亮在社区的每一天
去签到