go语言学习-常量

一般介绍:

       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语言学习-常量_第1张图片


注:本文例子参考go by example例子点击打开链接


你可能感兴趣的:(go语言学习)