一般介绍:
go常量和C语言的常量有点类似,也是用const关键字来声明一个常量,常量的类型可以为字符(character)、字符串(string)、布尔值(boolean)还有数值(numeric)。可以进行var变量声明的地方,都可以声明const常量。
值得注意的是,数值类型的const常量,是没有确切的类型的(比如int64,float64等),当然两个数值类型的const常量进行四则运算得到的结果的精度也是不固定的。可以通过强制类型转换和函数调用来为数值类型的const常量指定确切的类型。
预定义常量:Go语言预定义了这些常量:true、false和iota。其中iota比较特殊,可以被认为是一个可被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动加1。
const ( // iota被重置为0
c0 = iota // c0 = 0
c1 = iota // c1 = 1
c2 = iota // c2 = 2
)
如果两个const的赋值语句的表达式一样的,那么可以省略后一个赋值表达式,所以以上代码可以写成:
const ( // iota被重置为0
c0 = iota // c0 = 0
c1
c2
)
go不支持enum,一般可以使用在const后跟一对圆括号的方法定义一组常量的方法来定义枚举值:
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
代码例子:
package main
import "fmt"
import "math"
const s string = "constant" // 常量的声明在main函数外面,并指明为string类型
const s1 = "constant1" // 当然也可以不指明类型
func main() {
fmt.Println(s);
fmt.Println(s1);
const n = 700000000; // 常量的声明在main函数里面
// 这里两个常量进行/运算,得到的结果的精度是不固定的
// 如果两个常量刚好能整除,则结果不带小数部分,否则将带小数部分
const d = 3e20 / n;
fmt.Println(d);
// 数值类型的const常量是没有确切的类型,你可以通过强制类型转换为其指定一个类型
// 注意,此处int64(d)时将会报错,报错原因是常量被截断成Integer,即丢失精度
fmt.Println(float64(d));
// 当然你也可以通过函数调用,来为其指定类型。
fmt.Println(math.Sin(n));
}
正常运行结果:
数值类型转换失败:
iota和const实现enum例子:
package main
import "fmt"
func main() {
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
const a = iota;
const b = iota;
fmt.Println(Sunday);
fmt.Println(Monday);
fmt.Println(Tuesday);
fmt.Println(Wednesday);
fmt.Println(Thursday);
fmt.Println(Friday);
fmt.Println(Saturday);
fmt.Println(a);
fmt.Println(b);
}
运行结果:
注:本文例子参考go by example例子点击打开链接