golang_const

常量

定义

术语常量在 Go 中表示定值,例如 5,15,’hello world’ 等,常量一旦定义就不能重新分配其他的任何值,下面就是一个错误的例子,代码编译错误,无法重新分配新的值。

1
2
3
4
5
6
package main

func main() {
  const a = 10
  a = 20 // [error] reassignment not allowed
}

应该在编译前赋予好常量的值,下面的例子告诉我们无法将其分配给函数调用返回的值。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package main

import (
  "fmt"
  "math"
)

func main(){
  fmt.Println("Hello World Playground")
  var a = math.Sqrt(4) // Allowed
  const b = math.Sqrt(4) // Not Allowed
}

上面运行结果会出现编译错误,const initializer math.Sqrt(4)

字符串常量

值得注意的是字符串常量是无类型的

Go 是一种强类型语言。所有的变量都需要显式类型,看下面的例子

1
2
3
4
5
6
7
8
package main

import "fmt"

func main() {
  var name = "reallyli"
  fmt.Println("type %T value %v", name, name)
}

以上的例子会输出 类型是 String , 那么 String 就是其默认类型。通过下面的例子我们可以创建一个类型化常量

1
const name string = "reallyli"

Go 是一种强类型语言,不允许在分配期间混合类型,看下面的例子

1
2
3
4
5
6
7
8
package main

func main() {
  var defaultName = "reallyli"
  type myString string //string 类型的别名
  var customName, myString = "reallyli"
  customName = defaultName //not allowed 编译器认为两个变量的类型不一样 不能被重新赋值 
}

布尔常量

1
2
3
4
5
6
7
8
9
package main

func main() {  
    const trueConst = true //定义一个常量 trueConst
    type myBool bool // 定义一个变量类型 为 bool 的别名
    var defaultBool = trueConst //allowed // 定义一个变量 defaultBool
    var customBool myBool = trueConst //allowed 定一个变量类型为 myBool 的变量 customBool
    defaultBool = customBool //not allowed 两个类型不一样的变量 不能被重新赋值
}

数字常量

数字常量包括整数、浮点数和复数常量,看下面的例子

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package main

import (  
    "fmt"
)

func main() {  
    const a = 5
    var intVar int = a
    var int32Var int32 = a
    var float64Var float64 = a
    var complex64Var complex64 = a
    fmt.Println("intVar",intVar, "\nint32Var", int32Var, "\nfloat64Var", float64Var, "\ncomplex64Var",complex64Var)
}

数字表达式

数值常量可以在表达式中自由混合和匹配,只有在将它们分配给变量或在需要类型的代码中的任何位置使用时才需要类型。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package main

import (
  "fmt"
)

func main() {
  var a = 5.9 / 8
  fmt.Printf("a's type %T value %v", a, a) // a's type float64 value 0.7375
}