for 循环
func main() {
//输出10句 “您好,尚硅谷”
for i := 1; i <=10; i++ {
fmt.Println("您好,尚硅谷")
}
}
基本语法:
for循环变量初始化;循环条件;循环变量迭代 {
循环操作(语句)
}
对上面的语法格式说明:
1)对for循环来说,有四个要素
2)循环变量初始化
3)循环条件
4)循环操作(语句),有人也叫循环体。
5)循环变量迭代
for循环执行的顺序说明:
1)执行循环变量初始化,比如 i := 1
2)执行循环条件,比如 i <= 10
3)如果循环条件为真,就执行循环操作 : 比如 fmt.Println("...")
4)执行循环变量迭代,比如 i++
5)反复执行2、3、4步骤,直到循环条件为false时,就退出for循环
注意事项和细节说明:
1)循环条件是返回一个布尔值的表达式
2)for循环的第二种使用方式
for 循环判断条件 {
//循环执行语句
}
将变量初始化和变量迭代写到其他位置
func main() {
//输出10句 “您好,尚硅谷”
i := 1
for i <=10 {
fmt.Println("您好,尚硅谷")
i++
}
}
3)for循环的第三种使用方式
for {
//循环执行语句
}
上面的写法等价 for ; ; {} 是一个无限循环,通常需要配合break语句使用
func main() {
k := 1
for { //等价于 for ; ; {
if k <= 10 {
fmt.Println("ok")
} else {
break
}
k++
}
}
4)Golang 提供 for-range 的方式,可以方便遍历字符串和数组。
注意:for-range在遍历字符串时,是按照字符来遍历的,而不是按照字节来的,请注意这点。
细节讨论:
如果我们的字符串含有中文,那么传统的遍历字符串方式,就是错误,会出现乱码。原因是传统的对字符串的遍历是按照字节来遍历,而一个汉字在utf8编码是对应3个字节。
如何解决: 需要将 str 转成 []rune 切片
对应 for-range 遍历方式而言,是按照字符方式遍历。因此如果有字符串有中文,也是OK的。
案例:
1)打印1~100之间所有是9的倍数的整数的个数及总和
func main() {
//分析思路
//1.使用for循环对 max 进行遍历
//2.当一个数%9 == 0 就是9的倍数
//3.我们需要声明两个变量 count 和 sum 来保存个数和总和
var count int
var sum int
for i := 1; i <= 100; i++ {
if i % 9 == 0 {
count++
sum += i
}
}
fmt.Printf("count=%v sum=%v
", count, sum)
}
2)完成下面的表达式输出,6是可变的。
func main() {
var n int = 6
for i := 0; i <= n; i++ {
fmt.Printf("%v + %v = %v
", i, n - i, n)
}
}
while 和 do..while
Go语言没有while 和 do..while 语法,这一点需要注意。如果我们需要使用类似其他语言(比如 java / c 的 while 和 do..while ),可以通过for循环来实现其使用效果。
1)for循环实现while的效果
for {
if 循环条件表达式 {
break //跳出for循环..
}
循环操作(语句)
循环变量迭代
}
例子:
func main() {
var i int = 1
for {
if i > 10 {
break
}
fmt.Println("hello, world", i)
i++
}
}
do..while的实现
2)for循环实现do..while的效果
循环变量初始化
for {
循环操作(语句)
循环变量迭代
if 循环条件表达式 {
break //跳出for循环..
}
}
说明:
1)上面的循环是先执行,在判断,因此至少执行一次。
2)当循环条件成立后,就会执行break, break 就是跳出for循环,结束循环
案例:
func main() {
var j int = 1
for {
fmt.Println("hello,ok", j)
j++
if j > 10 {
break
}
}
}