zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Linux下基于PAM机制的USB Key的制作
    IP-route管理路由
    Linux下CPU主板监控工具lm_sensors
    两个网卡隔离方法
    关机后内存的数据是怎么丢失的呢?
    6.0 移动端页面布局
    CyberPlayer 使用教程
    5.10 HTML5 音频和视频
    让Ecshop网店系统用户自动登陆
    設定 Bootstrap/SASS/Bower/gulp (Windows平台)
  • 原文地址:https://www.cnblogs.com/nx520zj/p/9670262.html
Copyright © 2011-2022 走看看