前言
既然go
中存在变量,那么也会有与变量相对的常量。那么在go
中如何去声明和使用常量呢?下面我会娓娓道来
注意本文是基于go 1.12.5
的,可能会与其他版本存在差异。
常量声明
常量名的命名规则与变量的命名规则一致。而常量声明使用的是const
关键字(有点类似Java
中的final
),不过与变量不一样,常量声明没有这么多种声明方式。需要注意以下两点
- 常量值必须要是编译期可以确定的数字、字符串和布尔值。
- 常量声明时必须进行赋值操作
使用const声明
常量的声明十分简单,只要看看下面的示例就能够知道怎么声明了。
const i int = 1 // 常量声明方式 const 常量名 常量类型 = 常量值
上面的例子有一点很值得吐槽,既然常量声明是必须赋值,这样就没有必要声明常量类型了。因为常量类型可以通过类型推导而推导出来。例如下面的例子
const i = 1 // 常量声明方式 const 常量名 = 常量值
声明多个常量
常量和变量一样,也支持同时声明多个,例如下面的例子
// 等价于
// const i = 1
// const j = "hello"
// const k = true
const i,j,k =1,"hello",true
当然也支持换一种写法,这种写法叫做常量组
const (
i = 1
j="hello"
k=true
)
需要注意,在常量组中如果下一个常量与上一个常量值相同,可以进行以下的简写(这个特性感觉有点扯淡,多个类型和值相同的常量不明白想用来干嘛 )
const(
i = 1
j // 类型和值与上一个常量 i 相同
)
常量使用
常量声明以后也是离不开使用的,下面会向大家演示如何使用常量。当然也会带上一些使用时的注意事项
常量分类
常量和变量一样,也分为以下2
种:
- 全局常量
- 局部常量:声明在函数内的常量,和局部变量不同。声明后未被使用也不影响编译。
下面会通过一个例子做演示
package main
const global = 1 // 全局常量
func main() {
const local = 2 // 局部常量
}
常量作用域
常量与变量一样,也支持作用域内的同名常量会被覆盖这个特点,下面会用一个简单的例子演示作用域覆盖的特点
package main
import "fmt"
const i = true // 全局常量,作用域为main包
func main() {
const i = 1 // 局部常量,作用域为main函数
if true {
const i = "test" // 局部常量,作用域为if
fmt.Println(i) // 作用域还在if中,输出为"test"
}
fmt.Println(i) // 作用域回到main函数中,输出1
}
运行结果
test
1