go语言必会:for循环的4种用法

go语言教程:

【for】是go语言中唯一一个用于循环的关键字,但有四种用法,分别是常规的变量迭代(for)、条件循环(while)、死循环(loop)、以及数组迭代(foreach),括号中是其他语言中相似的关键字。

下面用这四种不同的用法,实现打印1,2,3…N的需求。

迭代

// for.go
package main
import "fmt"

func forTest1(N int){
    for n := 1; n < N; n++ {
        fmt.Println("n=", n)
    }
}

func main() {
	forTest1(3);
}

可见,在用于迭代时,与C语言中的for循环类似,循环条件被两个分号分为三个部分,【n := 1】声明迭代变量的初始值;【n < N】指明迭代终止的条件;【n++】则是每次迭代,迭代变量的变化操作。

【main】是入口函数,在测试其他用法时,内容需要改为其他函数,为了行文简洁,本文后续不再给出。

条件循环

func forTest2(N int){
	n := 0
	for n < N{
		fmt.Println("n=", n)
		n += 1
	}
}

【n < N】即为循环条件,非常易于理解。

由于这种使用方法,并没有给出每次循环后,循环变量的变化,所以不要忘记在循环体中给出类似【n += 1】这样的语句,否则就可能陷入死循环。

死循环

如果想陷入死循环,那么只需取消循环条件就可以了,就像下面这样。

for {
	fmt.Println("n=", n)
	n += 1
}

这种死循环可以用来维持图形界面。但就算是图形界面,也会存在关闭的需求,为了跳出死循环,可以用break

func forTest3(N int){
	n := 1
	for{
		fmt.Println("n=", n)
		n += 1
		if n>N{
			break
		}
	}
}

【break】作为终止循环的关键字,在任何for语句中都是有效的。相比之下,【continue】可以跳过某一次循环

func forTest4(N int){
	for i:=1; i<10; i++{
		if i%2==0{	//%表示求余
			continue
		}
		if i > N{
			break
		}
		fmt.Println("i=", i)
	}
}

当i可以被2整除的时候,则跳过当前循环;当i大于8的时候,则跳出循环,运行结果如下

>go run for.go
i= 1
i= 3
i= 5
i= 7

数组迭代

数组是类型相同的一组固定长度的序列,下面列举一些声明或初始化数组的方法

var a [3]int	// a是长度为3的数组,内容为0
var b = [3]int{1, 2, 3}
c := [3]int{1,2,3}
fmt.Println("c[0]=", c[0])

前三行语句创建三个不同的数组, a a a长度为3,内容为0; b b b c c c长度也为3,内容为 1 , 2 , 3 1, 2, 3 1,2,3

一般来说,数组的长度是恒定的,如果想取出数组中所有值,那么没必要再额外设置一个截止条件。而且对于 i ⩽ N i\leqslant N iN这种截止条件,如果数组的长度不为 N N N那就十分尴尬。

为此,可以使用for循环的数组迭代方法,示例如下

func forTest5(){
	d := [4]int{1, 3, 5, 7}
	for i,x:= range d {
		fmt.Println("d[",i,"]=", x)
   }
}

【i,x:= range d】的含义是,从数组 d d d中取出其下标 i i i和下表对应的值 x x x,测试结果如下

>go run for.go
d[ 0 ]= 1
d[ 1 ]= 3
d[ 2 ]= 5
d[ 3 ]= 7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值