Go 语言常量
Go语言中的常量也分为整型常量、实型常量、字符常量、字符串常量、自定义常量。
自定义常量: const 常量名称 数据类型 = 值or const 常量名称 = 值
package main
import "fmt"
func main() {
//const PI float32 = 3.14
//PI = 110 // 报错
//fmt.Println("PI = ", PI )
const PI = 3.14
PI = 110 // 报错
fmt.Println("PI = ", PI )
}
除此之外Go语言还支持一次性定义多个常量
package main
import "fmt"
func main() {
// 多重赋值方式
const num1, num2 int = 100, 200
fmt.Println("num1 = ", num1)
fmt.Println("num2 = ", num2)
// 常量组方式
const (
num3 = 100
num4 = 200
)
fmt.Println("num3 = ", num3)
fmt.Println("num4 = ", num4)
// 常量组+多重赋值
const (
num5, num6 = 100, 200
num7 = 300
)
fmt.Println("num5 = ", num5)
fmt.Println("num6 = ", num6)
fmt.Println("num7 = ", num7)
}
Go语言自定义常量注意点
- 定义的局部变量或者导入的包没有被使用, 那么编译器会报错,无法编译运行。
- 但是定义的常量没有被使用,编译器不会报错, 可以编译运行。
package main
import "fmt"
func main() {
// 可以编译运行
const PI float32 = 3.14
}
package main
import "fmt"
func main() {
const (
num1 = 998
num2 = num1 // 和上一行的值一样
num3 = 666
num4 = num3 // 和上一行的值一样
num5 = num4 // 和上一行的值一样
)
fmt.Println("num1 = ", num1) // 998
fmt.Println("num2 = ", num2) // 998
fmt.Println("num3 = ", num3) // 666
fmt.Println("num4 = ", num4) // 666
fmt.Println("num5 = ", num5) // 666
const (
num6, num7 = 100, 200
num8, num9 = num6, num7 // 和上一行的值一样
)
fmt.Println("num6 = ", num6)
fmt.Println("num7 = ", num7)
fmt.Println("num8 = ", num8)
fmt.Println("num9 = ", num9)
}
枚举常量
借助iota标识符来实现枚举类型。
利用iota标识符标识符实现从0开始递增的枚举:
package main
import "fmt"
func main() {
const (
male = iota
female = iota
yao = iota
)
fmt.Println("male = ", male) // 0
fmt.Println("male = ", female) // 1
fmt.Println("male = ", yao) // 2
}
wgchen@wgchen-virtual-machine:~/桌面/test$ go run .
male = 0
male = 1
male = 2
wgchen@wgchen-virtual-machine:~/桌面/test$
iota注意点:
- 在同一个常量组中,iota从0开始递增, 每一行递增1。
- 在同一个常量组中,只要上一行出现了iota,那么后续行就会自动递增。
package main
import "fmt"
func main() {
const (
male = iota // 这里出现了iota
female // 这里会自动递增
yao
)
fmt.Println("male = ", male) // 0
fmt.Println("male = ", female) // 1
fmt.Println("male = ", yao) // 2
}
在同一个常量组中,如果iota被中断, 那么必须显示恢复。
package main
import "fmt"
func main() {
const (
male = iota
// 这里被中断, 如果没有显示恢复, 那么下面没有赋值的常量都和上一行一样
female = 666
yao
)
fmt.Println("male = ", male) // 0
fmt.Println("male = ", female) // 666
fmt.Println("male = ", yao) // 666
}
package main
import "fmt"
func main() {
const (
male = iota
female = 666 // 这里被中断
// 这里显示恢复, 会从当前常量组第一次出现iota的地方开始,每一行递增1, 当前是第3行,所以值就是2
yao = iota
)
fmt.Println("male = ", male) // 0
fmt.Println("male = ", female) // 666
fmt.Println("male = ", yao) // 2
}
iota也支持常量组+多重赋值, 在同一行的iota值相同。
package main
import "fmt"
func main() {
const (
a, b = iota, iota
c, d = iota, iota
)
fmt.Println("a = ", a) // 0
fmt.Println("b = ", b) // 0
fmt.Println("c = ", c) // 1
fmt.Println("d = ", d) // 1
}
iota自增默认数据类型为int类型, 也可以显示指定类型。