go 语言基础之流程控制

流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”。

Go语言中最常用的流程控制有iffor,而switchgoto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。

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循环可以通过breakgotoreturnpanic语句强制退出循环。

for {
    循环体语句
}

  for range(键值循环)

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

  1. 数组、切片、字符串返回索引和值。
  2. map返回键和值。
  3. 通道(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语句可以结束forswitchselect的代码块。

break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的forswitchselect的代码块上。 举个例子:

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
中指
*/

 

 

 

 

 
posted @ 2026-06-04 10:44  烟雨楼台,行云流水  阅读(5)  评论(0)    收藏  举报