Golang 流程控制
1. 选择结构
if 语句
if else
package main
import (
"fmt"
"io/ioutil"
)
func if001() {
var num = 34
if num%2 == 0 {
fmt.Println("是偶数")
} else {
fmt.Println("是奇数")
}
}
func if002() {
filename := "a.txt"
contents, err := ioutil.ReadFile(filename)
if err != nil {
fmt.Println("读取文件失败")
} else {
fmt.Printf("%s\n", contents)
}
// 以上读取文件动作和判断并打印动作可以写成一下格式
if contents, err := ioutil.ReadFile(filename); err != nil {
fmt.Println("读取文件失败")
} else {
fmt.Printf("%s\n", contents)
}
}
func main() {
//if001()
if002()
}
else if
package main
import "fmt"
func main() {
score := 75
if score >= 60 && score<= 100 {
fmt.Println("合格")
} else if score >=0 && score < 60 {
fmt.Println("不合格")
} else {
fmt.Println("存在问题")
}
}
switch case 语句
写法 1
package main
import "fmt"
// 输入成绩返回等级
func grade(score int) string {
// 定义空字符串
var level string
switch {
case score <0 || score > 100:
level = "输入错误"
case score < 60:
level = "D"
case score < 80:
level = "C"
case score < 90:
level = "B"
case score < 100:
level = "A"
default:
level = "其他"
}
return level
}
func main() {
fmt.Println(grade(89))
}
写法 2
package main
import "fmt"
func main() {
str := "a"
switch str {
case "a", "b":
fmt.Println("找到了")
case "c":
fmt.Println("找到了")
default:
fmt.Println("没有找到")
}
}
在 java 和 js 等其他语言中 case
语句中需要添加 break
来终止当前 switch
语句的执行,如果不写 break
则会自动穿透到下一个 case
语句块。但是在 go 语言中每个 case
语句结束默认 break
,不会穿透到下一个 case
语句块,如果要想使当前 case
语句块穿透到下一个 case
语句块,可以使用关键字 fallthrough
package main
import "fmt"
func main() {
str := "a"
switch str {
case "a":
fmt.Println("A")
fallthrough
case "b":
fmt.Println("B")
default:
fmt.Println("XXX")
}
}
2. 循环结构
语句结构
for 初始化语句;条件判断;结束语句 {
循环代码块
}
for
package main
import (
"fmt"
"time"
)
func for001() {
// 死循环
for {
fmt.Println("无限循环中...")
time.Sleep(1*time.Second)
}
}
func for002() {
for i:=0;i<5;i++ {
fmt.Println("123")
}
}
func for003() {
i :=0
for ;i<5; i++ {
fmt.Println("456")
}
}
func for004() {
// 多参数
for i,num := 0,1; i < 5 && num < 10; i,num = i+1, num+2 {
fmt.Println("abc")
}
}
func main() {
//for001()
//for002()
//for003()
for004()
}
range
package main
import "fmt"
func main() {
s := "abc"
// 接收下标
for i := range s {
fmt.Printf("index: %d, value: %c\n", i, s[i])
}
// 接收下标和值
for i, v := range s {
fmt.Printf("index: %d, value: %c\n", i, v)
}
}
3. 跳转语句
break
package main
import "fmt"
func main() {
for i:=0; i<=5;i++ {
if i == 2 {
// 跳出当前循环
break
}
fmt.Println(i)
}
}
continue
package main
import "fmt"
func main() {
for i:=0; i<=5;i++ {
if i == 2 {
// 跳过当次循环
continue
}
fmt.Println(i)
}
}
goto
创建 label 标签,使用 goto
关键字可以跳转到 label 标签位置
label 名字是自定义的
package main
import "fmt"
func main() {
for i := 0; i <= 5; i++ {
if i == 2 {
// 跳转到lable_tag代码块位置
goto LABEL_TAG
}
fmt.Println(i)
}
fmt.Println("123")
// 自定义的lable跳转位置标签
LABEL_TAG:
fmt.Println("456")
}