这是golang系列教程第5节。

定义

术语常量在Go语言中表示固定的值,例如5, -89, “I love Go”,67.89等等。

看看下面的代码:

var a int = 50  
var b string = "I love Go"  

在上述代码中a和b被常量50和“I love Go”赋值。关键字const被用于表示常量,例如50和I love Go。上述代码中即使我们没有显示使用关键字const,但是在Go的内部,它们仍然是常量。

常量,顾名思义表示不能再重新赋值,因此下面代码无法正常运行,将会报错“cannot assign to a”。

package main

func main() {  
    const a = 55 // 允许
    a = 89       // 不允许重新赋值
}

常量的值会在编译的时候确定。因为函数调用发生在运行时,所以不能将函数的返回值赋值给常量。

package main

import (  
    "fmt"
    "math"
)

func main() {  
    fmt.Println("Hello, playground")
    var a = math.Sqrt(4)   // 允许
    const b = math.Sqrt(4) // 不允许
}
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)

}
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 // 不允许

}
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 // 不允许
}

上面的程序是自我解释的。

数字常量

数字常量包含整数、浮点数和复数的常量。数字常量中有一些微妙之处。

让我们看一些例子来说清楚。

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)
}
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)

}
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)
}
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)
}
5.985.9/80.7375aa's type float64 value 0.7375

以上就是全部关于常量的介绍。有问题请在下方反馈和评论。