1.const语法,隐式重复前一个表达式
go中常量在const语法块中实现,const语法提供了一种"隐式重复前一个表达式"的机制,以下面的代码为例,在const语法块中定义了a,b,c,d四个常量。其中a ,b 定义是1,2;c,d并没有初始化,这里根据"隐式重复前一个表达式"机制,c,d 会重复前面的表达式,所以c,d也会定义为1,2
Go
package main
import "fmt"
// 1.const语法 隐式重复前一个表达式
const (
a, b = 1, 2
c, d // 等价 c,d = 1,2
)
func main() {
fmt.Printf("a = %v, b = %v\n", a, b)
fmt.Printf("c = %v, d = %v\n", c, d)
}
2.iota
在const语法的基础上,go为我们提供了iota关键字,iota关键字的作用是在const块中,iota从定义的那一行为0,随后每新增一行,iota累加1,下面的代码中,结合了const中隐式重复前一个表达式和iota自动按行累加2个机制,需要注意的是当H1 = iota显式的写了iota时,iota并没有特殊的从0开始,依然延续前面的iota的逐行累加值。
Go
package main
import "fmt"
// 1.const语法 隐式重复前一个表达式
const (
a, b = 1, 2
c, d // 等价 c,d = 1,2
)
const (
// iota = 0 => 0, 10
Apple, Banana = iota, iota + 10
// iota = 1 Strawberry, Grape = iota, iota+10 => 1. 11
Strawberry, Grape
// iota = 2 Pear, Watermelon = iota, iota + 10 => 2, 12
Pear, Watermelon
H1 = iota // iota = 3
H2 // iota iota = 4
)
func main() {
fmt.Printf("Apple = %v, Banana = %v\n", Apple, Banana)
fmt.Printf("Strawberry = %v, Grape = %v\n", Strawberry, Grape)
fmt.Printf("Pear = %v, Watermelon = %v\n", Pear, Watermelon)
fmt.Printf("H1 = %v, H2 = %v \n", H1, H2)
fmt.Printf("a = %v, b = %v\n", a, b)
fmt.Printf("c = %v, d = %v\n", c, d)
}