使用
声明
常量是一个简单值的标识符,在程序运行时,不会被修改的量
const identifier [type] = value
两种声明方式
显式类型定义 const b string = "abc"
隐式类型定义 const b = "abc" // 类型可以省略,因为编译器可以根据变量(常量)的值来推导类型
常量定义时可以限定常量类型,但不是必需的。如果
- 定义时没指定类型,那么它与字面常量一样,是无类型(untyped)常量。一个没有指定类型的常量被使用时,会根据其使用环境而推断出它需要具备的类型。换句话说,未定义类型的常量会在必要时根据上下方来获得相关类型。
- 定义时指定类型,常量类型为指定类型常量。
const 规则
- 定义常量组时,如果不提供初始值,则表示将使用上行的表达式
- 使用相同的表达式不代表有相同的值
- iota是常量的计数器,在组中从0开始,组中每定义1个常量自动递增1
- 通过初始化规则与iota可以达到枚举的效果
- 每遇到一个const关键字, iota就会重置为0
如下应用
func main() {
const (
A = iota
B
C
D = "haha"
E
F = 100
G
H = iota
I
)
const (
J = iota
)
}
fmt.Println(A)
fmt.Println(B)
fmt.Println(C)
fmt.Println(D)
fmt.Println(E)
fmt.Println(F)
fmt.Println(G)
fmt.Println(H)
fmt.Println(I)
fmt.Println(J)
注意
- 常量中的数据类型只可以是布尔, 数字型和字符串
- 不曾使用的常量,在编译的时候不报错
- 显示指定类型的时候,必须确保常量左右值类型一致,需要时可做显示类型转换。这与变量就不一样了,变量是可以是不同的类型值。
枚举类型
使用常量组作为枚举类型。一级相关数值的数据
const (
SPRING = 0
SUMMER = 1
AUTUMN = 2
WINTER = 3
)
iota
特殊常量,可以认为是一个可以被编译器修改的常量
iota可以被用作枚举值
const (
a = iota // 初始值是 0
b = iota // 新的一行, iota++ (自动增加1)
c = iota
)
const (
d = iota // 0
e // e = iota 1
)
枚举与iota
const (
a = iota //0
b = iota //1
c = iota //2
)
const (
a = iota //0
b //1
c //2
)
const (
a = iota //0
b = 8 //8
c //8, c没有赋值,继承上一个常量值
)
const (
a = 'A' // 65
b = iota // 1
c = 'B' // 66
d = iota // 3
)
// const 规则
// 1. 定义常量组时,如果不提供初始值,则表示将使用上行的表达式
// 2. 使用相同的表达式不代表有相同的值
// 3. iota是常量的计数器,在组中从0开始,组中每定义1个常量自动递增1
// 4. 通过初始化规则与iota可以达到枚举的效果
// 5. 每遇到一个const关键字, iota就会重置为0
const(
x = iota << 1 // 0 << 1
y // 1 << 1
z // 2 << 1
)
const (
m = 1 << iota // 1 << 0
n // 1 << 1
o // 1 << 2
)
const (
_ = iota // 通过赋值给空白标识符来忽略值
KB ByteSize = 1 << (10*iota)
MB
GB
TB
)