操作系统:centos8;golang版本:1.17.4
关键字 const
被用于表示常量,常量的值会在编译的时候确定,常量不能再重新赋值为其他的值。
例如,以下代码会出现一个编译错误:cannot assign to temp (declared const)
package main
import "fmt"
func main() {
const temp = 1
temp = 2
}
定义常量有两种方式:
(1) const temp = 1
,这种情况下temp是无类型的。
(2) const temp int = 1
,这种情况下temp是int类型的。
存储在常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
1、字符串常量
const hello = "hello world"
上面定义的hello常量是没有类型的。
go是一门强类型语言,所有的变量必须有明确的类型。而无类型的常量有一个与它们相关联的默认类型,当且仅当一行代码需要时才提供它。
例如,当我们把常量hello赋值给变量name时,var name = hello
,使用了hello的默认类型string。
2、布尔常量
布尔常量的规则与字符串常量相同,定义无类型布尔常量时有默认类型,也可以定义有类型的布尔常量。
3、数字常量
数字常量的规则有一些不同。例如下面一段代码:
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 是 int,所以它变成一个 int 常量。 var complex64Var complex64 = a
要求 a 是 complex64,因此它变成一个复数类型。
这个程序的运行结果为:
intVar 5
int32Var 5
float64Var 5
complex64Var (5+0i)
4、数字表达式
数字常量可以在表达式中自由混合和匹配,只有当它们被分配给变量或者在需要类型的代码中的任何地方使用时,才需要类型。例如:
package main
import (
"fmt"
)
func main() {
var a = 6.66 / 8
fmt.Printf("a's type %T value %v", a, a)
}
在上面的程序中, 6.66 在语法中是浮点型,8 是整型,6.66/8 是允许的,因为两个都是数字常量。除法的结果是 0.8325 是一个浮点型,所以 a 的类型是浮点型。这个程序的输出结果是: a's type float64 value 0.8325
。