分支控制
1.if else
- 写法1
age := 30;
if age > 18 {
fmt.Println("成年人")
}
- 写法2
if age := 30; age > 18 {
fmt.Println("成年人")
}
两种写法的
{}
都不能省略,区别是:变量age的作用域不同
2.switch case
这里的break语句,可写可不写。
switch extname := ".html"; extname {
case ".html":
fmt.Println("text/html")
break
case ".css":
fmt.Println("text/css")
break
case ".js":
fmt.Println("text/javascript")
break
default:
fmt.Println("找不到任何后缀")
}
- 一个case可以有多个分支
多个case值中间使用英文逗号分隔
var n = 5
switch n{
case 1, 3, 5, 7, 9:
fmt.Println("奇数")
case 2, 4, 6, 8, 10:
fmt.Println("偶数")
}
- 分支还可以使用表达式
var age = 30
case age < 24:
fmt.Println("好好学习")
case age >=24 && age <= 60:
fmt.Println("好好工作")
case age > 60:
fmt.Println("好好养生")
- fullthrough
fallthrough可以执行满足条件的case的下一个case。是为了兼容C语言中的case设计的
var age = 18
switch {
case age < 24:
fmt.Println("好好学习")
case age >=24 && age <= 60:
fmt.Println("好好工作")
fallthrough
case age > 60:
fmt.Println("好好养生")
fallthrough
}
循环
1.for
- 写法1
for i := 1; i <= 10; i++ {
fmt.Print(i)
}
- 写法2
i := 1
for ; i <= 10; i++ {
fmt.Print(i)
}
- 写法3
i := 1
for i <= 10 {
fmt.Print(i)
i++
}
- 写法4
i := 1
for i <= 10 {
fmt.Print(i)
i++
}
- 写法5
Go语言中没有while,可以使用for循环来替代
i := 1
for {
if i <= 10 {
fmt.Print(i)
} else {
break
}
i++
}
2.for range
用于遍历数组、切片、字符串、map及通道(channel),通过for range遍历的返回值有以下规律:
1.数组、切片、字符串返回索引和值
2.map返回键和值
3.通道(channel)只返回通道内的值
var str = "你好golang"
for k, v := range str {
fmt.Printf("key=%v val=%v\n", k, v)
//key=0 val=你
//key=1 val=好
}
var arr = []string{"php", "java", "node", "golang"}
for i := 0; i < len(arr); i++ {
fmt.Println(arr[i])
}
for _ val := range arr {
fmt.Println(val)
}
跳出循环
- break
在多重循环中,可以用标号lable标出想break的循环
lable1:
for i := 0; i < 2; i++ {
for j := 0; j < 10; j++ {
if j == 1 {
break lable1
}
fmt.Printf("i=%v j=%v\n", i, j)
}
}
}
- continue
提前结束本次循环,回到下一次循环开始的地方
lable2:
for i := 0; i < 2; i++ {
for j := 0; j < 10; j++ {
if j == 1 {
break lable1
}
fmt.Printf("i=%v j=%v\n", i, j)
}
}
}
// i=0 j=0
// i=1 j=0
- goto
通过标签进行代码间的无条件跳转,可以快速跳出循环,在避免重复退出上有一定的帮助。
var n = 30
if n > 18 {
fmt.Printf("成年人")
goto label3
}
fmt.Println("aaa")
label3:
fmt.Println("bbb")
有疑问加站长微信联系(非本文作者)