go语言循环 break continue goto switch

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

(完)

(完)