掌握 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 循环
 */
相关推荐
小技与小术1 分钟前
数据结构之树与二叉树
开发语言·数据结构·python
码蜂窝编程官方9 分钟前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
hccee23 分钟前
C# IO文件操作
开发语言·c#
hummhumm28 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
J老熊38 分钟前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
AuroraI'ncoding44 分钟前
时间请求参数、响应
java·后端·spring
zmd-zk1 小时前
flink学习(2)——wordcount案例
大数据·开发语言·学习·flink
好奇的菜鸟1 小时前
Go语言中的引用类型:指针与传递机制
开发语言·后端·golang
Alive~o.01 小时前
Go语言进阶&依赖管理
开发语言·后端·golang
花海少爷1 小时前
第十章 JavaScript的应用课后习题
开发语言·javascript·ecmascript