Go流程控制语句
if判断
#单分支
package main
import "fmt"
func main() {
age := 19
if age > 18 {
fmt.Println("aaaaaa")
}
}
#双分支
package main
import "fmt"
func main() {
age := 19
if age > 18 {
fmt.Println("aaaaaa")
} else {
fmt.Println("bbbbbb")
}
}
#多分支
package main
import "fmt"
func main() {
if age > 35 {
fmt.Println("ccccc")
} else if age > 18 {
fmt.Println("dddd")
} else {
fmt.Println("eeeee")
}
}
#其他写法
package main
import "fmt"
func main() {
//age作用域在if代码块中,没有在函数中
if age := 19; age > 18 {
fmt.Println("aaaaaa")
} else {
fmt.Println("bbbbbb")
}
}
for循环
#写法一
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Println(i)
}
}
#写法二
package main
import "fmt"
func main() {
i := 5
for ; i < 10; i++ {
fmt.Println(i)
}
}
#写法三
package main
import "fmt"
func main() {
i := 5
for i < 10 {
fmt.Println(i)
i++
}
}
#死循环
package main
import "fmt"
func main() {
for {
fmt.Println("123")
}
}
//99乘法表
package main
import "fmt"
func main() {
var c int
for i := 1; i < 10; i++ {
for a := 1; a < 10; a++ {
c = i * a
fmt.Printf("%d x %d = %d\n",i,a,c)
}
fmt.Println()
}
}
//直角三角形
package main
func main() {
for i := 1; i < 7; i++ {
for j := 0; j < i; j++ {
fmt.Printf("*")
}
fmt.Println()
}
}
range键值循环
Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值。
package main
import "fmt"
func main() {
s := "hello 北京"
for i, v := range s {
fmt.Printf("%d %c\n",i, v)
}
}
for循环可以通过break、goto、return、panic语句强制退出循环
package main
import "fmt"
func main() {
for i := 0;i<10;i++{
if i == 5{
break/continue
}else{
fmt.Println(i)
}
}
}
switch
可方便地对大量的值进行条件判断,规定每个switch只能有一个default分支
#写法一
package main
import "fmt"
func main() {
var n = 3
switch n {
case 1:
fmt.Println("aaa")
case 2:
fmt.Println("bbb")
case 3:
fmt.Println("ccc")
default:
fmt.Println("无效数字")
}
}
#写法二
package main
import "fmt"
func main() {
switch n := 3; n {
case 1:
fmt.Println("aaa")
case 2:
fmt.Println("bbb")
case 3:
fmt.Println("ccc")
default:
fmt.Println("无效数字")
}
}
#写法三,一个分支可以有多个值
package main
import "fmt"
func main() {
switch n := 3; n {
case 1, 3, 5, 7, 9:
fmt.Println("aaa")
case 2, 4, 6, 8:
fmt.Println("bbb")
default:
fmt.Println(n)
}
}
#写法四
package main
import "fmt"
func main() {
n := 30
switch {
case n < 20:
fmt.Println("aaa")
case n >= 20 && n <= 30:
fmt.Println("bbb")
case n > 60:
fmt.Println("ccc")
default:
fmt.Println("ddd")
}
}
goto(跳转到指定标签)
通过标签进行代码间的无条件跳转。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
// forloop2:
for j := 0; j < 5; j++ {
if i == 2 && j == 2 {
goto forloop1
}
fmt.Printf("%v-%v\n", i, j)
}
}
forloop1:
fmt.Println("aaaaaaaaaa")
}
break
可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for、switch和 select的代码块上
package main
import "fmt"
func main() {
BREAKDEMO1:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 2 {
break BREAKDEMO1
}
fmt.Printf("%v-%v\n", i, j)
}
}
fmt.Println("...")
}
continue
可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。在continue语句后添加标签时,表示开始标签对应的循环。
package main
import "fmt"
func main() {
forloop1:
for i := 0; i < 5; i++ {
// forloop2:
for j := 0; j < 5; j++ {
if i == 2 && j == 2 {
continue forloop1
}
fmt.Printf("%v-%v\n", i, j)
}
}
}

浙公网安备 33010602011771号