go语言的特殊变量 iota

Posted nx520zj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于go语言的特殊变量 iota的主要内容,如果未能解决你的问题,请参考以下文章

Go基础1

Go基础1

golang初识 和 变量,常量,iota

go语言学习 ---iota

通学go语言系列之基础变量及语句

Go语言基础:语言格式|变量|常量|数据类型