常量使用关键字 const 定义,用于存储不会改变的数据。 存储在常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。 常量的定义格式:const identifier [type] = value,例如:const Pi = 3.14159 在 Go 语言中,你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。 显式类型定义: `const b string = "abc"` 隐式类型定义: `const b = "abc"` 数字型的常量是没有大小和符号的,并且可以使用任何精度而不会导致溢出 并行赋值 ``` const beef, two, c = "eat", 2, "veg" const Monday, Tuesday, Wednesday, Thursday, Friday, Saturday = 1, 2, 3, 4, 5, 6 const ( Monday, Tuesday, Wednesday = 1, 2, 3 Thursday, Friday, Saturday = 4, 5, 6 ) ``` 常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不过: ``` package main import "unsafe" const ( a = "hello world!" b = len(a) c = unsafe.Sizeof(a) ) func main(){ println(a, b, c) // hello world! 12 16 } ``` Go语言中没有隐式转换,只能强制转换,const 定义常量没有指定数据类型时可以隐式的转换数据类型 ``` package main import "fmt" func sum(a float32, b float32) float32{ return a + b } func main(){ // var m, n = 1.1, 2 // 报错 const m, n = 1.1, 2 // 正常 fmt.Println(sum(m, n)) } ``` #### iota iota,特殊常量,可以认为是一个可以被编译器修改的常量。 iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。 iota 可以被用作枚举值: ``` const ( a = iota b = iota c = iota ) ``` **iota 用法** ``` package main import "fmt" func main() { const ( a = iota //0 b //1 c //2 d = "ha" //独立值,iota += 1 e //"ha" iota += 1 f = 100 //iota +=1 g //100 iota +=1 h = iota //7,恢复计数 i //8 ) fmt.Println(a,b,c,d,e,f,g,h,i) } ```