2023-10-29 流程控制

2023-11-06  本文已影响0人  护念

流程控制

这部分主要是,学习go的 if / switch / for

1. if 在判断前可以做些初始化

// 这里a的初始化只对if内部有效
    if a := 12; a < 14 {
        fmt.Println("a小于14")
    }

    a := 23
    //除了可以初始化值以外 还可以打印值
    if fmt.Println("开始判断了"); a > 10 {
        fmt.Println("此时a大于10")
    }

2. for 循环基础用法

在go中没有while,都是通过for实现的

// 1. 最标准的用法
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }

    // 2. 充当while功能
    a := 10
    for a > 1 { // 只要a大于1就会一直执行
        fmt.Println(a)
        a--
    }

    // 3. 无限循环
    b := 99
    for {
        if b < 80 {
            break
        }
        fmt.Println(b)
        b--
    }

3. for 配合range做迭代器(string/map/slice/array/channel)

    str := "abc"
    // 这里可以省略第一个参数
    for i := range str {
        // 默认情况下这里是asica编码 这里用%c
        fmt.Printf("%c\n", str[i])
    }
    // a
    // b
    // c

    ss := []int{1, 2, 3, 4}
    for index, val := range ss {
        fmt.Printf("index: %d; val: %d\n", index, val)
    }
    // index: 0; val: 1
    // index: 1; val: 2
    // index: 2; val: 3
    // index: 3; val: 4

4. for range时候非引用类型(数组要注意)range时候的生效问题

arr1 := [3]int{1, 2, 3}

    for i, val := range arr1 { // 由于数组是值传递,所以在range运行中修改的arr1 不会对一开始range的数组值产生影响

        if i == 0 {
            arr1[1] = 111
            arr1[2] = 222
            fmt.Println(arr1) // 保证修改后是有效的
        }

        arr1[i] = val + 100
    }
    fmt.Println(arr1)
    // [101 102 103]

    // 如果这里是一个引用类型则会在rang时生效
    ss := []int{1, 2, 3}
    for i, val := range ss {
        if i == 0 {
            ss[1] = 111
            ss[2] = 222
            fmt.Println(ss)
        }

        ss[i] = val + 100
    }

    fmt.Println(ss)
    //[101 211 322]

5. switch用法

    score := 89  // 分数
    grade := "A" // 成绩

    switch {
    case score >= 90: // 以冒号结尾
        grade = "A" //
    case score >= 80:
        grade = "B" //
    case score >= 70:
        grade = "C" //
    default: //
        grade = "D"
    }

    fmt.Printf("我的成绩是%s\n", grade)
    // 我的成绩是B
package main

import "fmt"

func main() {
    checkType("abc")
    checkType(23)
}

// 这里的 x类型是 interface 任意类型的值
func checkType(x interface{}) {

    // 表达式写在switch中 只有interface才能用x.(type) 方法
    switch x.(type) {
    case nil:
        fmt.Println("这是nil")
    case string:
        fmt.Println("这是字符串")
    case bool:
        fmt.Println("这是布尔类型")
    case float32:
        fmt.Println("这是一个浮点类型")
    case int8, int16, int32, int64: // 可以是多个类型
        fmt.Println("这是一个整数类型")
    default:
        fmt.Println("这是其它类型")
    }
}
上一篇 下一篇

猜你喜欢

热点阅读