Go语言冷知识-刷题遗漏知识补充iota|Go主题月
只学过C,C++,Java,Python,JavaScript,一点点Rust,表示第一次见到这么个关键字,一头慌慌哒的雾水~~
个人是这么理解的:const内部的递增行号,const每行复制上一行的表达形式。我也在学习阶段,不一定准确。
官方给出的iota的测试用例链接为:https://golang.org/test/iota.go,熟悉这些测试用例,iota的知识点就应该算是掌握了。
例如,官方测试用例中的两个样例:重点关注下述代码中的F
1 | const ( |
再比如:
1 | const ( |
需要注意的几点:
iota表示当前内部的行号, 从0开始,即使第一行没有写明iota。
1
2
3
4const (
a = 1 // 1, iota = 0
b = iota // iota=1
)iota复制上一行的表达式,除iota本身外,其他均为明确的数字:
上述两点,可以看以下示例:重点关注示例中的d。
1
2
3
4
5
6const (
a = 1 // 1, iota = 0
b = iota << a // iota=1, 实际表达式为 1 << 1 = 2
c = iota << b // iota=2, 实际表达式为 2 << 2 = 4
d // iota = 3, 模仿上一行的表达式为 iota << 2 即 3 << 2 = 12
)iota在下一行增长
1
2
3
4
5const (
abit, amask = 1 << iota, 1<<iota - 1 // iota= 0, abit = 1, amask = 0
bbit, bmask = 1 << iota, 1<<iota - 1 // iota= 1, bbit = 2, bmask = 1
cbit, cmask = 1 << iota, 1<<iota - 1 // iota= 2, cbit = 4, cmask = 3
)
PS: 我本地执行程序时,将文件名命名为了iota_test.go,执行 go run oita_test.go 报错为:go run: cannot run *_test.go files (iota_test.go)。
据说是因为_test后缀结尾的会被认为是测试文件。未涉及到这部分,暂且略过。
PS: 果然//
对齐才好看。