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中可以使用匿名变量来获取想要的值
}