掌握 Go 语言中的循环结构:从基础到高级

一、if else(分支结构)

1、if 条件判断基本写法
Go 复制代码
package main
import (
	"fmt"
)
func main() {
	score := 65
	if score >= 90 {
		fmt.Println("A")
	} else if score > 75 {
		fmt.Println("B")
	} else {
		fmt.Println("C")
	}
}
2、if 条件判断特殊写法
  • if 条件判断还有一种特殊的写法,可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断
Go 复制代码
package main
import "fmt"
func main() {
	//这里的 score 是局部作用域
	if score := 56; score >= 90 {
		fmt.Println("A")
	} else if score > 75 {
		fmt.Println("B")
	}else {
		fmt.Println("C")
		fmt.Println(score) // 只能在函数内部打印 score
	}
	// fmt.Println(score) //undefined: score
}

二、for(循环结构)

1、for 循环
1、普通 for 循环
Go 复制代码
package main
import "fmt"
func main() {
	// 打印: 0 ~ 9 的数字
	for i := 0; i < 10; i++ {
		fmt.Println(i)
	}
}
2、外部定义 i
Go 复制代码
package main
import "fmt"
func main() {
	i := 0
	for i < 10 {
		fmt.Println(i)
		i++
	}
}
3、省略初始语句
Go 复制代码
package main
import "fmt"
func main() {
	i := 0
	for ; i < 10; i++ {
		fmt.Println(i)
	}
}
2、打印 0-10 的所有偶数
Go 复制代码
package main
import "fmt"
func main() {
	// 0 2 4 6 8
	for i := 0; i < 10; i++ {
		if i%2 == 0 {
			fmt.Println(i)
		}
	}
}
3、嵌套循环
Go 复制代码
package main
import "fmt"
func main() {
	for i := 1; i <= 9; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%vx%v=%v \t", i, j, i*j)
		}
		fmt.Println()
	}
}
/*
1x1=1
2x1=2 	2x2=4
3x1=3 	3x2=6 	3x3=9
4x1=4 	4x2=8 	4x3=12 	4x4=16
5x1=5 	5x2=10 	5x3=15 	5x4=20 	5x5=25
6x1=6 	6x2=12 	6x3=18 	6x4=24 	6x5=30 	6x6=36
7x1=7 	7x2=14 	7x3=21 	7x4=28 	7x5=35 	7x6=42 	7x7=49
8x1=8 	8x2=16 	8x3=24 	8x4=32 	8x5=40 	8x6=48 	8x7=56 	8x8=64
9x1=9 	9x2=18 	9x3=27 	9x4=36 	9x5=45 	9x6=54 	9x7=63 	9x8=72 	9x9=81
*/
4、模拟 while 循环
  • Go 语言中是没有 while 语句的,我们可以通过 for 代替
Go 复制代码
package main
import "fmt"
func main() {
	k := 1
	for { // 这里也等价 for ; ; {
		if k <= 10 {
			fmt.Println("ok~~", k)
		} else {
			break   //break 就是跳出这个 for 循环
		}
		k++
	}
}
5、for range(键值循环)
Go 复制代码
package main

import "fmt"

func main() {
    str := "abc上海"
    for index,var := range str{
        fmt.Printf("索引:%d,值=%c \n",index, val)
    }
}
/*
索引=0, 值=a
索引=1, 值=b
索引=2, 值=c
索引=3, 值=上
索引=6, 值=海
*/

三、switch case

  • 使用 switch 语句可方便地对大量的值进行条件判断
1、case 一般用法
Go 复制代码
package main
import "fmt"
func main() {
	score := "B"
	switch score {
		case "A":
			fmt.Println("非常棒")
		case "B":
			fmt.Println("优秀")
		case "C":
			fmt.Println("及格")
		default:
			fmt.Println("不及格")
	}
}
2、case 语句多个值
Go 复制代码
package main
import "fmt"
func main() {
	n := 2
	switch n {
	case 1, 3, 5, 7, 9:
		fmt.Println("奇数")
	case 2, 4, 6, 8:
		fmt.Println("偶数")
	default:
		fmt.Println(n)
	}
}
3、fallthrough 语句
  • fallthrough 语法可以执行满足条件的 cast 的下一个 case,是为了兼容C 语言中的 case 设计
Go 复制代码
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("...")
	}
}
/*
a
b

四、break、continue、goto

1、break 跳出单循环
Go 复制代码
package main
import "fmt"
func main() {
	k := 1
	for { // 这里也等价 for ; ; {
		if k <= 10 {
			fmt.Println("ok~~", k)
		} else {
			break   //break 就是跳出这个 for 循环
		}
		k++
	}
}
2、跳出多重循环
  • 在多重循环中,可以用标号 label 标出想 break 的循环
Go 复制代码
package main
import "fmt"
func main() {
	lable2:
	for i := 0; i < 2; i++ {
		for j := 0; j < 10; j++ {
			if j == 2 {
				break lable2
			}
			fmt.Println("i j 的值:", i, "-", j)
		}
	}
}
/*
i j 的值: 0 - 0
i j 的值: 0 - 1
 */
3、continue(继续下次循环)
Go 复制代码
package main
import "fmt"
func main() {
	for i := 0; i < 2; i++ {
		for j := 0; j < 4; j++ {
			if j == 2 {
				continue
			}
			fmt.Println("i j 的值", i, "-", j)
		}
	}
}
/*
i j 的值 0 - 0
i j 的值 0 - 1
i j 的值 0 - 3
i j 的值 1 - 0
i j 的值 1 - 1
i j 的值 1 - 3
 */
4、goto(跳转到指定标签)
Go 复制代码
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 循环")
}
/*
0-0
0-1
结束 for 循环
 */
相关推荐
Prejudices2 分钟前
C++如何调用Python脚本
开发语言·c++·python
我狠狠地刷刷刷刷刷14 分钟前
中文分词模拟器
开发语言·python·算法
wyh要好好学习18 分钟前
C# WPF 记录DataGrid的表头顺序,下次打开界面时应用到表格中
开发语言·c#·wpf
AitTech18 分钟前
C#实现:电脑系统信息的全面获取与监控
开发语言·c#
qing_04060321 分钟前
C++——多态
开发语言·c++·多态
孙同学_21 分钟前
【C++】—掌握STL vector 类:“Vector简介:动态数组的高效应用”
开发语言·c++
froginwe1122 分钟前
XML 编辑器:功能、选择与使用技巧
开发语言
Jam-Young28 分钟前
Python的装饰器
开发语言·python
man201736 分钟前
【2024最新】基于springboot+vue的闲一品交易平台lw+ppt
vue.js·spring boot·后端
hlsd#1 小时前
关于 SpringBoot 时间处理的总结
java·spring boot·后端