一、常量的定义与赋值
Golang中使用const关键字来定义常量,常量声明语法格式为
const (
identifier [type] = value
identifier [type] = value
...)
其中type是可选的,当常量翻译成其他类型时才需要显示声明类型
例如:
const s string = "hello world"
const n = 100
const pi float32 = 3.14
也可以使用const()来定义常量组
例如:
const (
s string = "hello world"
n = 100
pi float32 = 3.14
)
常量还可以用作枚举,例如定义每个星期的天数
const (
Sunday = 0
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
)
二、常量表达式
常量表达式是在编译时求值的表达式,可以用于任何需要常量的地方,如数组长度、切片容量等
例如:
const a = 10
const b = 20
const c = a + b //常量表达式,c的值为30
const d = len("hello world") //常量表达式,d的值为11
需要注意的是,常量表达式不允许使用变量和函数调用等
例如:
const a = 10
var b = 20
const c = a + b //错误,常量表达式不能使用变量
三、常量的枚举值
Golang中的枚举值是常量,常量组也可以表示枚举值。例如定义一个星期几的枚举值:
type Weekday int
const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
在上面的代码中,通过使用iota关键字来自动生成枚举值,第一个枚举值默认为0,后面的枚举值默认加1。也可以显式的指定枚举值
type Weekday int
const (
Sunday Weekday = 0
Monday Weekday = 1
Tuesday Weekday = 2
Wednesday Weekday = 3
Thursday Weekday = 4
Friday Weekday = 5
Saturday Weekday = 6
)
四、常量与类型转换
常量的类型可以通过显式的类型转换来进行修改,例如将整型的常量转换为浮点型
const a = 100
const b = float64(a) //将a转换为float64
需要注意,常量的类型转换只有在编译时才有效,因此需要保证常量转换后的类型能够进行合法的操作
五、常量不可修改
常量一旦赋值不可修改,进行修改会引发编译错误,例如:
const a = 10
a = 20 //错误
这与变量有很大区别,变量是可以修改的
六、常量的作用域
常量的作用域与变量相同,作用域只在当前块内有效
例如:
const a = 10 //全局常量
func test() {
const a = 20 //局部常量
fmt.Println(a) //输出20
}
func main() {
fmt.Println(a) //输出10
test()
}