使用

声明

常量是一个简单值的标识符,在程序运行时,不会被修改的量

  1. const identifier [type] = value

两种声明方式

  1. 显式类型定义 const b string = "abc"
  2. 隐式类型定义 const b = "abc" // 类型可以省略,因为编译器可以根据变量(常量)的值来推导类型

常量定义时可以限定常量类型,但不是必需的。如果

  • 定义时没指定类型,那么它与字面常量一样,是无类型(untyped)常量。一个没有指定类型的常量被使用时,会根据其使用环境而推断出它需要具备的类型。换句话说,未定义类型的常量会在必要时根据上下方来获得相关类型。
  • 定义时指定类型,常量类型为指定类型常量

const 规则

  1. 定义常量组时,如果不提供初始值,则表示将使用上行的表达式
  2. 使用相同的表达式不代表有相同的值
  3. iota是常量的计数器,在组中从0开始,组中每定义1个常量自动递增1
  4. 通过初始化规则与iota可以达到枚举的效果
  5. 每遇到一个const关键字, iota就会重置为0

如下应用

  1. func main() {
  2. const (
  3. A = iota
  4. B
  5. C
  6. D = "haha"
  7. E
  8. F = 100
  9. G
  10. H = iota
  11. I
  12. )
  13. const (
  14. J = iota
  15. )
  16. }
  17. fmt.Println(A)
  18. fmt.Println(B)
  19. fmt.Println(C)
  20. fmt.Println(D)
  21. fmt.Println(E)
  22. fmt.Println(F)
  23. fmt.Println(G)
  24. fmt.Println(H)
  25. fmt.Println(I)
  26. fmt.Println(J)

注意

  • 常量中的数据类型只可以是布尔, 数字型和字符串
  • 不曾使用的常量,在编译的时候不报错
  • 显示指定类型的时候,必须确保常量左右值类型一致,需要时可做显示类型转换。这与变量就不一样了,变量是可以是不同的类型值。

枚举类型

使用常量组作为枚举类型。一级相关数值的数据

  1. const (
  2. SPRING = 0
  3. SUMMER = 1
  4. AUTUMN = 2
  5. WINTER = 3
  6. )

iota

特殊常量,可以认为是一个可以被编译器修改的常量
iota可以被用作枚举值

  1. const (
  2. a = iota // 初始值是 0
  3. b = iota // 新的一行, iota++ (自动增加1)
  4. c = iota
  5. )
  6. const (
  7. d = iota // 0
  8. e // e = iota 1
  9. )

枚举与iota

  1. const (
  2. a = iota //0
  3. b = iota //1
  4. c = iota //2
  5. )
  6. const (
  7. a = iota //0
  8. b //1
  9. c //2
  10. )
  11. const (
  12. a = iota //0
  13. b = 8 //8
  14. c //8, c没有赋值,继承上一个常量值
  15. )
  16. const (
  17. a = 'A' // 65
  18. b = iota // 1
  19. c = 'B' // 66
  20. d = iota // 3
  21. )
  22. // const 规则
  23. // 1. 定义常量组时,如果不提供初始值,则表示将使用上行的表达式
  24. // 2. 使用相同的表达式不代表有相同的值
  25. // 3. iota是常量的计数器,在组中从0开始,组中每定义1个常量自动递增1
  26. // 4. 通过初始化规则与iota可以达到枚举的效果
  27. // 5. 每遇到一个const关键字, iota就会重置为0
  28. const(
  29. x = iota << 1 // 0 << 1
  30. y // 1 << 1
  31. z // 2 << 1
  32. )
  33. const (
  34. m = 1 << iota // 1 << 0
  35. n // 1 << 1
  36. o // 1 << 2
  37. )
  38. const (
  39. _ = iota // 通过赋值给空白标识符来忽略值
  40. KB ByteSize = 1 << (10*iota)
  41. MB
  42. GB
  43. TB
  44. )