go语言循环 break continue goto switch 的用法
前几篇文章分享了 array 数组、slice 切片、map 集合,这篇文章分享如何循环获取里面的元素,同时也是对前几篇文章的复习。
本篇文章会用到的关键字 for、range、break、continue、goto、switch。
# 循环数组
package main
import ("fmt")
func main() {
person := [3] string {"Tom", "Aron", "Jon"}
fmt.Printf("len=%d cap=%d array=%v\n", len(person), cap(person), person)
for k, v := range person {
fmt.Printf("person[%d]: %s\n", k, v)
}
fmt.Println("")
for i := range person{
fmt.Printf("person[%d]:%s\n", i, person[i])
}
fmt.Println("")
for i:=0;i<len(person);i++ {
fmt.Printf("person[%d]:%s\n", i, person[i])
}
// 使用空白符
fmt.Println("")
for _, name:=range person {
fmt.Println("name", name)
}
}
运行结果:
C:\Go\www>go run dengyu.go
len=3 cap=3 array=[Tom Aron Jon]
person[0]: Tom
person[1]: Aron
person[2]: Jon
person[0]:Tom
person[1]:Aron
person[2]:Jon
person[0]:Tom
person[1]:Aron
person[2]:Jon
name Tom
name Aron
name Jon
# 循环slice
package main
import ("fmt")
func main() {
person := [] string {"Tom", "Aron", "Jon"}
fmt.Printf("len=%d cap=%d slice=%v\n", len(person), cap(person), person)
for k, v := range person {
fmt.Printf("person[%d]: %s\n", k, v)
}
fmt.Println("")
for i := range person{
fmt.Printf("person[%d]:%s\n", i, person[i])
}
fmt.Println("")
for i:=0;i<len(person);i++ {
fmt.Printf("person[%d]:%s\n", i, person[i])
}
// 使用空白符
fmt.Println("")
for _, name:=range person {
fmt.Println("name", name)
}
}
运行结果:
C:\Go\www>go run dengyu.go
len=3 cap=3 slice=[Tom Aron Jon]
person[0]: Tom
person[1]: Aron
person[2]: Jon
person[0]:Tom
person[1]:Aron
person[2]:Jon
person[0]:Tom
person[1]:Aron
person[2]:Jon
name Tom
name Aron
name Jon
# 循环map
package main
import ("fmt")
func main() {
person := map[int]string{1:"Tom", 2:"Aron", 3:"Jon",}
fmt.Printf("len=%d map=%v\n", len(person), person)
for k, v := range person {
fmt.Printf("person[%d]: %s\n", k, v)
}
fmt.Println("")
for i := range person{
fmt.Printf("person[%d]:%s\n", i, person[i])
}
fmt.Println("")
for i:=0;i<len(person);i++ {
fmt.Printf("person[%d]:%s\n", i, person[i])
}
// 使用空白符
fmt.Println("")
for _, name:=range person {
fmt.Println("name", name)
}
}
运行结果:
C:\Go\www>go run dengyu.go
len=3 map=map[1:Tom 2:Aron 3:Jon]
person[1]: Tom
person[2]: Aron
person[3]: Jon
person[1]:Tom
person[2]:Aron
person[3]:Jon
person[0]:
person[1]:Tom
person[2]:Aron
name Tom
name Aron
name Jon
# break
跳出当前循环,可用于 for、switch、select。
package main
import ("fmt")
func main() {
for i:=1;i<=10;i++ {
if i==6 {
break
}
fmt.Println("i=", i)
}
}
运行结果:
C:\Go\www>go run dengyu.go
i= 1
i= 2
i= 3
i= 4
i= 5
# continue
跳过本次循环,只能用于 for。
package main
import ("fmt")
func main() {
for i:=1;i<=10;i++ {
if i==6 {
continue
}
fmt.Println("i=", i)
}
}
C:\Go\www>go run dengyu.go
i= 1
i= 2
i= 3
i= 4
i= 5
i= 7
i= 8
i= 9
i= 10
# goto
改变函数内代码执行顺序,不能跨函数使用。
package main
import ("fmt")
func main() {
for i:=1;i<=10;i++ {
if i==6 {
goto END
}
fmt.Println("i=", i)
}
END :
fmt.Println("end")
}
运行结果:
C:\Go\www>go run dengyu.go
i= 1
i= 2
i= 3
i= 4
i= 5
end
# switch
package main
import ("fmt")
func main() {
for i:=0; i<10;i++ {
s(i)
}
}
func s(i int) {
var ii int = i
fmt.Println("当 i=",ii,"时\n")
switch i{
case 1:
fmt.Println("---输出的是i=%d", i)
case 2:
fmt.Println("---输出的是i=%d", i)
fallthrough
case 3,4,5:
fmt.Println("---输出的是i=3 or 4 or 5")
default:
fmt.Println("---输出的是xxx")
}
}
运行结果:
C:\Go\www>go run dengyu.go
当 i= 0 时
---输出的是xxx
当 i= 1 时
---输出的是i=%d 1
当 i= 2 时
---输出的是i=%d 2
---输出的是i=3 or 4 or 5
当 i= 3 时
---输出的是i=3 or 4 or 5
当 i= 4 时
---输出的是i=3 or 4 or 5
当 i= 5 时
---输出的是i=3 or 4 or 5
当 i= 6 时
---输出的是xxx
当 i= 7 时
---输出的是xxx
当 i= 8 时
---输出的是xxx
当 i= 9 时
---输出的是xxx
# 结论
1 默认每个 case 带有 break
2 case 中可以有多个选项
3 fallthrough 不跳出,并执行下一个 case
(完)
(完)