• go语言的特殊变量 iota


    iota,是go语言的特殊常量,可以认为是一个可以被编译器修改的常量。

    在每一个const关键字出现时,被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1。

    来看看代码:

    const y = iota
    const r = iota
    
    func main() {
        fmt.Print("y的值为:")
        fmt.Println(y)
        fmt.Print("r的值为:")
        fmt.Println(r)   
    }

    每一个const关键字出现时,都被重置为0.所以输出为:

        y的值为:0
        r的值为:0

    然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1。

    const (
        q = iota
        w = iota
        e = iota
    }
    func main() {
        fmt.Print("q的值为:")
        fmt.Println(q)
        fmt.Print("w的值为:")
        fmt.Println(w)
        fmt.Print("e的值为:")
        fmt.Println(e)
    }

    输出:

        q的值为:0
        w的值为:1
        e的值为:2

    其实个人认为iota最重要的部分是当做枚举值使用。

    那么提出这样一个问题,如果要让e等于4 怎么办?

    const (
        q = iota
        w = iota
        _
        _
        e = iota
    }
    func main() {
        fmt.Print("q的值为:")
        fmt.Println(q)
        fmt.Print("w的值为:")
        fmt.Println(w)
        fmt.Print("e的值为:")
        fmt.Println(e)
    }
    //输出
        q的值为:0
        w的值为:1
        e的值为:4

    再看个特殊例子1,e的值是多少:

    const (
        q = iota
        w = 100 ////即使w没有调用iota,但是同样会使iota += 1
        e = iota
    }
    func main() {
        fmt.Print("q的值为:")
        fmt.Println(q)
        fmt.Print("w的值为:")
        fmt.Println(w)
        fmt.Print("e的值为:")
        fmt.Println(e)
    }

    所以输出:

        q的值为:0
        w的值为:100
        e的值为:2

    再看看个特殊例子2,w和e会延续上一级的q的使用,调用iota

    const (
        q = iota
        w // w和e会延续上一级的q的使用,调用iota
        e //
        f = 100
        h = iota
    }
    func main() {
        fmt.Print("q的值为:")
        fmt.Println(q)
        fmt.Print("w的值为:")
        fmt.Println(w)
        fmt.Print("e的值为:")
        fmt.Println(e)
        fmt.Print("f的值为:")
        fmt.Println(f)
        fmt.Print("h的值为:")
        fmt.Println(h)
    }

    输出结果为:

        q的值为:0
        w的值为:1
        e的值为:2
        f的值为:100
        h的值为:4

    再看看个特殊例子3,对于iota每新增一行 计数才加1 同一行 计数不加1。

    const (
        q, w = iota + 1, iota + 3
        e, f
        h = iota
    }
    func main() {
        fmt.Print("q的值为:")
        fmt.Println(q)
        fmt.Print("w的值为:")
        fmt.Println(w)
        fmt.Print("e的值为:")
        fmt.Println(e)
        fmt.Print("f的值为:")
        fmt.Println(f)
        fmt.Print("h的值为:")
        fmt.Println(h)
    }

    输出的结果为,原因为   对于iota每新增一行 计数才加1 同一行 计数不加1。所以q为1,w为3.而e只去延续q,f只去延续w。

        q的值为:1
        w的值为:3
        e的值为:2
        f的值为:4
        h的值为:2
  • 相关阅读:
    Windows Phone7 开发工具简介
    peration not supported. Unknown error: 0x8973190e
    C/C++学习建议(摘抄自:程序员2010年8月P61页)
    OpenOffice/LibreOffice的行距问题
    Finder打开剪切功能
    设备资源管理系统-用户管理
    设备资源管理系统-数据字典
    设备资源管理系统-代办事宜
    设备资源管理系统-首页显示
    设备资源管理系统-DAO底层方法-查询
  • 原文地址:https://www.cnblogs.com/nx520zj/p/9670262.html
Copyright © 2020-2023  润新知