for循环
基本语法
- 第一种
for 循环变量初始化;循环条件;循环变量迭代{
循环操作(语句)
}
for i := 0; i < 10; i++ {
fmt.Println(1)
} - 第二种 类似于其它语言得while,但是golang中没有while!!!
for 循环条件{
循环操作(语句)
}
i := 0
for i < 10 {
fmt.Println(1)
i++
} - 第三种 通常需要配合break操作
for {
循环操作
}
i := 0
for {
if i > 10 {
break
}
fmt.Println(1)
i++
}
等价于for ;;{},是一个无限循环
for循环的四要素
- 循环变量初始化
- 循环条件
- 循环操作,也成为循环体
- 循环变量迭代
for循环的执行顺序(以案例代码说明)
for i := 0; i < 10; i++ {
fmt.Println(1)
}
- 循环变量初始化(i:=0)
- 判断循环条件(i<10),条件表达式为真,则继续执行第三步,为假则直接跳出循环
- 循环操作,也成为循环体(fmt.Println(1))
- 循环变量迭代(i++)
for循环的使用细节
- 循环条件必须是一个返回bool值得表达式
- for循环遍历
- 传统遍历
var s string = “zjwwxnl”
for i := 0; i < len(s); i++ {
fmt.Printf(“%c\n”, s[i])
} - golang提供for-range的方式,可以方便的遍历字符串和数组
for index, val := range s {
fmt.Printf(“%v的索引对应%c\n”, index, val)
} - 区别
- 传统方法是按照字节进行输出的,当string类型里面出现中文(在utf-8中三个字节乃至四个字节组成)时,就会出现乱码的情况。可以使用将string转成[]rune切片的方式来解决
var s string = “郑静雯wxnl”
var s2 = []rune(s)
for i := 0; i < len(s2); i++ {
fmt.Printf(“%c\n”, s2[i])
} - 而第二种for-range是按照字符的方式遍历
for index, val := range s {
fmt.Printf(“%v的索引对应%c\n”, index, val)
}
输出结果:
0的索引对应郑
3的索引对应静
6的索引对应雯
9的索引对应w
10的索引对应x
11的索引对应n
12的索引对应l
不难发现它会自动的跳过字节,找到完整字符
- 传统方法是按照字节进行输出的,当string类型里面出现中文(在utf-8中三个字节乃至四个字节组成)时,就会出现乱码的情况。可以使用将string转成[]rune切片的方式来解决
实现while和dowhile
- 传统遍历
while的实现
结构:
循环变量声明
for {
if 循环条件{
break //跳出循环
}
循环执行
循环变量迭代
}
代码示例:
var i=0
for {
if i>10{
break //跳出循环
}
fmt.Println(1)
i++
}
do…while的实现
结构:
循环变量声明
for {
循环执行
循环变量迭代
if 循环条件{
break //跳出循环
}
}
代码示例:
var i=0
for {
fmt.Println(1)
i++
if i>10{
break //跳出循环
}
}
跳转
break
基本介绍
break是用来跳出for循环以及switch的常用利器
标签的介绍
是在一个循环外的,比如说定义一个循环的标签名是label1,那么它应该在for语句的上一行独立成行,并跟上冒号
break与标签
代码样例
func main() {
// label1:
for i := 0; i < 4; i++ {
label2:
for j := 0; j < 2; j++ {
if i+j >= 2 {
break label2
}
fmt.Printf(“%d”, i+j)
}
}
}
此时的break和break label2是一个效果,都是退出内循环
而break label2是退出外循环
continue
用法和break一样,包括标签,只不过continue是跳转到下一次循环,而break是跳出循环
goto
goto的基本介绍
- goto可以跳到任意行
- goto常常与条件判断结合
- golang中不是很建议使用goto,会使理解代码和调试变得困难
代码用例:
func main() {
var a = 20
fmt.Println(1)
fmt.Println(1)
fmt.Println(1)
if a > 10 {
goto label
}
fmt.Println(1)
fmt.Println(1)
label:
fmt.Println(1)
fmt.Println(1)
}
输出结果为:
1
1
1
1
1
return
return的基本介绍
- return是用来退出方法和函数的,其之后的代码全部不执行
- 如果return在main函数中,说明直接退出程序
代码用例:
func main() {
var a = 20
fmt.Println(1)
fmt.Println(1)
fmt.Println(1)
if a > 10 {
return
}
fmt.Println(1)
fmt.Println(1)
fmt.Println(1)
fmt.Println(1)
}
输出结果为:
1
1
1