数值常量包括整数、浮点数和复数常量。数值常量有一些微妙之处。
让我们看一些例子,让事情更清楚。
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)
}
在上面的程序中,const a
是无类型的,值为5
。
你可能想知道a的默认类型是什么?我们如何将它赋值给不同类型的变量?答案就在a的语法中。下面的程序将使事情更清楚。
package main
import (
"fmt"
)
func main() {
var i = 5
var f = 5.6
var c = 5 + 6i
fmt.Printf("i's type %T, f's type %T, c's type %T", i, f, c)
}
在上面的程序中,每个变量的类型由数值常量的语法决定。5
在语法上是整数,5.6
是浮点数,5 + 6i
在语法上是复数。当上面的程序运行时,它打印i
的类型int
, f
的类型float64
, c
的类型complex128
现在来看看下面的程序是如何工作的。
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)
}
在这个程序中,a
的值是5
, a
的语法是泛型的(它可以表示浮点数、整数甚至是没有虚部的复数),因此可以赋值给任何兼容的类型。这类常量的默认类型,可以认为是根据上下文动态生成的。
var intVar int = a
需要a
是整型的,所以它变成了一个整型常量。var complex64Var complex64 = a
要求a
是一个复数,因此它变成了一个复数常数。