3. 流程控制

3.1 if else

if ten > 10 {
    fmt.Println("> 10")
} else if ten < 10 {
    fmt.Println("< 10")
} else {
    fmt.Println("= 10")
}

// 可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断
if err := Connect(); err != nil {
    fmt.Println(err)
    return
}

3.2 for

// 普通循环
for i := 0; i < 10; i++ {
    ...
}

// 无限循环
var i int
for {
    if i > 10 {
        break
    }
    i++
    continue
}

// 高级 break
JLoop:
    for j := 0; j < 5; j++ {
        for i := 0; i < 10; i++ {
            if i > 5 {
                break JLoop
            }
            fmt.Println(i)
        }
    }

// 只有一个循环条件的循环
var i int
for i <= 10 {
    i++
}

for k, v := range 数组, 切片, 字符串, map, 通道 {
    ...
}

3.3 switch case

Go语言的 switch 中的每一个 case 与 case 间是独立的代码块,不需要通过 break 语句跳出当前 case 代码块以避免执行到下一行。

var a = "hello"
switch a {
case "hello":
    fmt.Println(1)
case "world":
    fmt.Println(2)
case "hi", "go":
    fmt.Println(2)
default:
    fmt.Println(0)
}
// 1

// 分支表达式
var r int = 11
switch {
case r > 10 && r < 20:
    fmt.Println(r)
}

// 兼容一些移植的代码,加入了 fallthrough
var s = "hello"
switch {
case s == "hello":
    fmt.Println("hello")
    fallthrough
case s != "world":
    fmt.Println("world")
}
// hello
// world

3.4 goto

goto 语句通过标签进行代码间的无条件跳转。

    // goto 跳出循环:
    for x := 0; x < 10; x++ {
        for y := 0; y < 10; y++ {
            if y == 2 {
                // 跳转到标签
                goto breakHere
            }
        }
    }
    // 手动返回, 避免执行进入标签
    return
    // 标签
breakHere:
    fmt.Println("done")


    // 统一错误处理
    err := firstCheckError()
    if err != nil {
        goto onExit
    }
    err = secondCheckError()
    if err != nil {
        goto onExit
    }
    fmt.Println("done")
    return
onExit:
    fmt.Println(err)
    exitProcess()

results matching ""

    No results matching ""