Go中的for循环

package main

import "fmt"

//Go语言中的循环只支持for,不支持while和do-while
//Go的for循环同样支持continue和break来控制循环,break可以选择中断特定标记的循环
func main()  {

	sum:=0
	//无限循环
	fmt.Println("---------break----------")
	fmt.Println()
	//for中的条件表达式:控制是否循环,忽略后就默认形成无限循环
	for  {
		sum++
		if sum>5 {
			break
		}
		fmt.Println(sum) //1 2  3  4  5
	}

	fmt.Println("-----------break  label-------------")
Loop:
	for j:=0;j<10 ;j++  {
		for i:=0;i<5 ;i++  {
			//中断标签Loop循环
			if i>3 {
				break	Loop
			}
			fmt.Println(i)//  0   1   2   3

		}
	}


	//for 中的初始语句:开始循环时执行的语句
	//将 step 放在 for 的前面进行初始化,for 中没有初始语句,此时 step 的作用域就比在初始语句中声明 step 要大。
	step:=2
	fmt.Println(step)  //2
	for ;step>0 ;step--  {
		fmt.Println(step)  //2  1
	}
	fmt.Println(step)  //0


	//只有一个循环条件的循环,类似python及其他语言的while
	var i  int
	for i<=10  {
		i++
	}

	jiujiu()

	range1()

}

//九九乘法表
func jiujiu()  {
	//行数
	for y:=1;y<=9 ;y++  {
		//列数
		for x:=1;x<=y ;x++  {
			fmt.Printf("%d*%d=%d ",x,y,x*y)
		}
		//换行
		fmt.Println()
		/*
		1*1=1
		1*2=2 2*2=4
		1*3=3 2*3=6 3*3=9
		1*4=4 2*4=8 3*4=12 4*4=16
		1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
		1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
		1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
		1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
		1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
		*/
	}
}

//for range结构是Go中特有的一种的迭代结构,for  range 可以遍历数组,切片,字符串,map及通道(channel)
/*
通过 for range 遍历的返回值有一定的规律:
数组、切片、字符串返回索引和值。
map 返回键和值。
通道(channel)只返回通道内的值。
 */
func range1()  {
	//遍历数组
	for  key,value:=range []int{1,2,3,4}{
		fmt.Printf("key: %d  value:%d \n",key,value)
		/*
		key: 0  value:1
		key: 1  value:2
		key: 2  value:3
		key: 3  value:4

		*/
	}


	//遍历字符串
	var str="golang 哈哈"
	for key,value:=range str{
		fmt.Printf("key:%d  value:0x%x\n",key,value)
		//一个字符串是 Unicode 编码的字符(或称之为 rune )集合,因此也可以用它来迭代字符串:
		//代码中的变量 value,实际类型是 rune 类型,以十六进制打印出来就是字符的编码。
		/*
		key:0 value:0x68
		key:1 value:0x65
		key:2 value:0x6c
		key:3 value:0x6c
		key:4 value:0x6f
		key:5 value:0x20
		key:6 value:0x4f60
		key:9 value:0x597d
		 */
	}


	//遍历map

	m:=map[string]int{
		"hello":0,
		"golang":1,
	}

	for key,value:=range m {
		fmt.Println(key,value)
		//hello 0
		//golang 1
	}


	//遍历通道channel:接收通道数据

	//创建一个整型类型的通道
	c:=make(chan int)
	//启动一个goroutine,往通道中推送数据,然后关闭通道
	go func() {
		c<-1
		c<-2
		c<-3
	//goroutine声明结束后,()马上执行
	}()
	//遍历
	for v:=range c{
		fmt.Println(v)
		//1
		//2
		//3
	}



	//for  range中可以使用匿名变量来获取想要的值
}

你可能感兴趣的:(GO)