常量,就是在程序编译阶段就确定下来的值,而程序在运行时则无法改变该值。在Go程序中,常量可以时数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。

1. 定义常量语法

定义一个常量使用const关键字,语法格式如下:

  1. const constantName [type] = value

const:定义常量关键字
constantName:常量名称
type:常量类型
value:常量的值

例如:

  1. package main
  2. import "fmt"
  3. func main() {
  4. const PI float64 = 3.14
  5. // 可以省略类型
  6. const PI2 = 3.14
  7. const (
  8. width = 100
  9. height = 200
  10. )
  11. fmt.Printf("PI: %v\n", PI)
  12. fmt.Printf("PI2: %v\n", PI2)
  13. fmt.Printf("width: %v\n", width)
  14. fmt.Printf("height: %v\n", height)
  15. }

const同时声明多个常量时,如果省略了值则表示和上面一行的值相同

  1. package main
  2. import "fmt"
  3. func main() {
  4. const (
  5. width = 100
  6. height = 200
  7. area
  8. )
  9. fmt.Printf("width: %v\n", width)
  10. fmt.Printf("height: %v\n", height)
  11. fmt.Printf("area: %v\n", area)
  12. }
  13. 结果:
  14. width: 100
  15. height: 200
  16. area: 200

2. iota

iota比较特殊,可以被认为是一个可以被编译器修改的常量,它默认开始值为0,没调用一次加1。遇到const
关键字时被重置为0

例如:

  1. package main
  2. import "fmt"
  3. func main() {
  4. const (
  5. a1 = iota
  6. a2 = iota
  7. a3 = iota
  8. )
  9. fmt.Printf("a1: %v\n", a1)
  10. fmt.Printf("a2: %v\n", a2)
  11. fmt.Printf("a3: %v\n", a3)
  12. }
  13. 结果:
  14. a1: 0
  15. a2: 1
  16. a3: 2

使用_跳过某些值

  1. package main
  2. import "fmt"
  3. func main() {
  4. const (
  5. a1 = iota
  6. _
  7. a2 = iota
  8. )
  9. fmt.Printf("a1: %v\n", a1)
  10. fmt.Printf("a2: %v\n", a2)
  11. }
  12. 结果:
  13. a1: 0
  14. a2: 2

iota声明中间插队

  1. package main
  2. import "fmt"
  3. func main() {
  4. const (
  5. a1 = iota
  6. a2 = 100
  7. a3 = iota
  8. )
  9. fmt.Printf("a1: %v\n", a1)
  10. fmt.Printf("a2: %v\n", a2)
  11. fmt.Printf("a3: %v\n", a3)
  12. }
  13. 结果:
  14. a1: 0
  15. a2: 100
  16. a3: 2