返回介绍

03.5.1 常量生成器:iota

发布于 2024-08-14 12:50:32 字数 4691 浏览 0 评论 0 收藏 0

常量生成器iota使用递增的数字来声明一系列相关的值,且无需明确定义其类型。

大部分与const关键字相关的概念,包括常量生成器iota,将会分成四部分,在constants.go中阐述。

第一部分代码:

package main

import "fmt"

type Digit int
type Power2 int

const PI  = 3.1415926

const (

   C1 = "C1C1C1"

   C2 = "C2C2C2"

   C3 = "C3C3C3"

)

这部分自定义了两个类型,分别叫做DigitPower2,以及四个常量。

Go可以使用现有的类型自定义新的类型,目的是从名字上区分可能使用相同数据类型,但是具有不同含义的变量。

第二部分的代码:

func main() {

   const s1  = 123
   var v1 float32 = s1 * 12
   fmt.Println(v1)
   fmt.Println(PI)

这部分声明了一个新的常量s1,并且在v1的声明中用到了它。

第三部分代码:

const (
   Zero Digit = iota
   One
   Two
   Three
   Four
)
fmt.Println(One)
fmt.Println(Two)

在这里我们使用常量生成器定义类型为Digit的常量,等同于下面的代码:

const (
Zero = 0
One = 1
Two = 2
Three = 3
Four = 4
)

最后一部分代码:

const (
      p2_0 Power2 = 1 << iota
      _
      p2_2
      _
      p2_4
      _
      p2_6
   )

   fmt.Println("2^0:", p2_0)
   fmt.Println("2^2:", p2_2)
   fmt.Println("2^4:", p2_4)
   fmt.Println("2^6:", p2_6)
}

这个常量生成器的使用与第三部分的略有不同,首先你会留意到_符号,意思是跳过本次常量声明,其次说明iota的递增属性是可以用到表达式中的。

接下来让我们深入const块中一探究竟。对于p2_0来说,iota的值是0,p2_0的值是1,对于p2_2来说iota的值是2p2_2的值是表达式1 << 2的运算结果,用二进制表示左移2位即00000100,相应十进制的值就是4。同样的道理,p2_4的值是16p2_6的值是64

如你所见,iota的使用能大大提高开发效率!

执行constants.go后得到下面的输出:

$ go run constants.go

1476
3.1415926
1
2
2^0: 1
2^2: 4
2^4: 16
2^6: 64

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文