这是我们 Golang 系列教程的第五篇。
定义
5-89I love Go67.89
看看下面的代码:
var a int = 50
var b string = "I love Go"
ab50I love GOconst50I love Goconst
cannot assign to a.
package main
func main() {
const a = 55 // 允许
a = 89 // 不允许重新赋值
}
在线运行程序[1]
常量的值会在编译的时候确定。因为函数调用发生在运行时,所以不能将函数的返回值赋值给常量。
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println("Hello, playground")
var a = math.Sqrt(4) // 允许
const b = math.Sqrt(4) // 不允许
}
在线运行程序[2]
amath.Sqrt(4)
bmath.Sqrt(4)const b = math.Sqrt(4)error main.go:11: const initializer math.Sqrt(4) is not a constant)
字符串常量
Hello WorldSam
什么类型的字符串属于常量?答案是他们是无类型的。
Hello World
const hello = "Hello World"
Hello Worldhellohello
Samname
package main
import (
"fmt"
)
func main() {
var name = "Sam"
fmt.Printf("type %T value %v", name, name)
}
在线运行程序[3]
var name = "Sam"nameSam
有没有办法创建一个带类型的常量?答案是可以的。以下代码创建一个有类型常量。
const typedhello string = "Hello World"
typedhellostring
Go 是一个强类型的语言,在分配过程中混合类型是不允许的。让我们通过以下程序看看这句话是什么意思。
package main
func main() {
var defaultName = "Sam" // 允许
type myString string
var customName myString = "Sam" // 允许
customName = defaultName // 不允许
}
在线运行程序[4]
defaultNameSamSamstringdefaultNamestring
myStringstring
myStringcustomNameSamSamcustomNamemyString
stringdefaultNamemyStringcustomNamemyStringstringdefaultNamecustomNamemain.go:7:20: cannot use defaultName (type string) as type myString in assignmen
布尔常量
truefalse
package main
func main() {
const trueConst = true
type myBool bool
var defaultBool = trueConst // 允许
var customBool myBool = trueConst // 允许
defaultBool = customBool // 不允许
}
在线运行程序[5]
上面的程序是自我解释的。
数字常量
数字常量包含整数、浮点数和复数的常量。数字常量中有一些微妙之处。
让我们看一些例子来说清楚。
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)
}
在线运行程序[6]
a5aa
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)
}
在线运行程序[7]
55.65+6ii's type int, f's type float64, c's type 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)
}
在线运行程序[8]
a5avar intVar int = aaintintvar complex64Var complex64 = aacomplex64
数字表达式
数字常量可以在表达式中自由混合和匹配,只有当它们被分配给变量或者在需要类型的代码中的任何地方使用时,才需要类型。
package main
import (
"fmt"
)
func main() {
var a = 5.9/8
fmt.Printf("a's type %T value %v",a, a)
}
在线运行程序[9]
5.985.9/80.7375aa's type float64 value 0.7375
上一教程 - 类型
下一教程 - 函数[10]
推荐阅读
Go 经典入门系列 4:类型