常量声明

  1. // 显示类型定义
  2. const name string = "zhangsan"
  3. // 隐式类型定义, 编译器可以根据变量的值来推断其类型。
  4. const name = "zhangsan"
  5. // 定义多个同类型常量
  6. const a, b, c = 1, 2, 3
  7. const (
  8. a = 1
  9. b = 2
  10. c = 3
  11. )
  12. // 定义多个不同类型常量
  13. const (
  14. a string = "zhangsan"
  15. b int = 1
  16. )
  17. // 如果类型和值一样,可简写
  18. const (
  19. a int = 0
  20. b
  21. c
  22. d float32 = 3.14
  23. e
  24. f
  25. )

隐式转换

对于无类型常量参与的表达式求职,Go编译器会根据上下文中的类型信息,把无类型常量自动转换为相应的类型后,再参与求值计算。

如下示例,当指定常量类型后,a + b 会运行报错:invalid operation: a + b (mismatched types int32 and float32)

  1. package main
  2. import "fmt"
  3. const a int32 = 99
  4. const b float32 = 0.99
  5. func main() {
  6. fmt.Println(a + b) // invalid operation: a + b (mismatched types int32 and float32)
  7. }

当不指定类型时,a + b 就会得到正确的结果

  1. package main
  2. import "fmt"
  3. const a = 99
  4. const b = 0.99
  5. func main() {
  6. fmt.Println(a + b) // 99.99
  7. }