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

猜你喜欢

转载自www.cnblogs.com/zhichaoma/p/12510006.html