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
  • 相关阅读:
    转 自学编程这几点非常重要
    转 错误:ORA-28002/ORA-65162 : the password will expire within 7 days 解决方法
    Python基础3
    Python基础2
    Python基础1
    爬虫实战项目集合
    Python3中PyMongo的用法
    难点--均方误差(MSE)和均方根误差(RMSE)和平均绝对误差(MAE)
    Excel合并
    mongoDB常用操作命令
  • 原文地址:https://www.cnblogs.com/nx520zj/p/9670262.html
Copyright © 2011-2022 走看看