使用
声明
常量是一个简单值的标识符,在程序运行时,不会被修改的量
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 = iotaBCD = "haha"EF = 100GH = iotaI)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 = 0SUMMER = 1AUTUMN = 2WINTER = 3)
iota
特殊常量,可以认为是一个可以被编译器修改的常量
iota可以被用作枚举值
const (a = iota // 初始值是 0b = iota // 新的一行, iota++ (自动增加1)c = iota)const (d = iota // 0e // e = iota 1)
枚举与iota
const (a = iota //0b = iota //1c = iota //2)const (a = iota //0b //1c //2)const (a = iota //0b = 8 //8c //8, c没有赋值,继承上一个常量值)const (a = 'A' // 65b = iota // 1c = 'B' // 66d = iota // 3)// const 规则// 1. 定义常量组时,如果不提供初始值,则表示将使用上行的表达式// 2. 使用相同的表达式不代表有相同的值// 3. iota是常量的计数器,在组中从0开始,组中每定义1个常量自动递增1// 4. 通过初始化规则与iota可以达到枚举的效果// 5. 每遇到一个const关键字, iota就会重置为0const(x = iota << 1 // 0 << 1y // 1 << 1z // 2 << 1)const (m = 1 << iota // 1 << 0n // 1 << 1o // 1 << 2)const (_ = iota // 通过赋值给空白标识符来忽略值KB ByteSize = 1 << (10*iota)MBGBTB)
