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
", contents)
	}

	// 以上读取文件动作和判断并打印动作可以写成一下格式
	if contents, err := ioutil.ReadFile(filename); err != nil {
		fmt.Println("读取文件失败")
	} else {
		fmt.Printf("%s
", 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
", i, s[i])
	}

	// 接收下标和值
	for i, v := range s {
		fmt.Printf("index: %d, value: %c
", 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")
}
原文地址:https://www.cnblogs.com/zhichaoma/p/12510006.html