- 前言
- Go 与操作系统
- Go 内部机制
- Go 基本数据类型
- 4 组合类型的使用
- 5 数据结构
- 6 Go package 中不为人知的知识
- 7 反射和接口
- 8 Go UNIX 系统编程
- 08.1 关于 UNIX 进程
- 08.2 flag 包
- 8.2 flag 包
- 08.3 io.Reader 和 io.Writer 接口
- 08.4 bufio 包
- 08.5 读取文本文件
- 08.6 从文件中读取所需的数据量
- 08.7 为什么我们使用二进制格式
- 08.8 读取 CSV 文件
- 08.9 写入文件
- 08.10 从磁盘加载和保存数据
- 08.11 再看strings包
- 08.12 关于bytes包
- 08.13 文件权限
- 08.14 处理 Unix 信号
- 08.15 Unix 管道编程
- 08.16 遍历目录树
- 08.17 使用 ePBF
- 08.18 关于 syscall.PtraceRegs
- 08.19 跟踪系统调用
- 08.20 User ID 和 group ID
- 08.21 其他资源
- 08.22 练习
- 08.23 总结
- 9 并发 Goroutines、Channel 和 Pipeline
- 10 Go 并发-进阶讨论
- 11 代码测试、优化及分析
- 12 Go 网络编程基础
- 13 网络编程 - 构建服务器与客户端
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
03.5.1 常量生成器:iota
常量生成器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"
)
这部分自定义了两个类型,分别叫做Digit
和Power2
,以及四个常量。
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
的值是2
,p2_2
的值是表达式1 << 2
的运算结果,用二进制表示左移2位即00000100
,相应十进制的值就是4。同样的道理,p2_4
的值是16
,p2_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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论