深入浅出Go语言编程
上QQ阅读APP看书,第一时间看更新

3.4.1 常量iota

Go语言预定义了true、false和iota三个常量。

true和false经常与布尔类型一起使用。

iota是Go语言中预定义的标识符,枚举常量时,它常用于自动生成连续值的序列。可以认为iota是一个自增枚举常量的计数器。iota只能在常量表达式中使用,常常被用于定义一组相关常量,它可以在不显式指定值的情况下自动递增。在每个关键字const出现时,iota都会被重置为0。在下个关键字const出现之前,每出现一次iota,变量的值会在上个值的基础上增加1。

下面的示例代码演示了通过iota定义一个星期中每一天的方式。

//枚举是一种特殊的数据类型,用于定义一组有限的、互不相同的值
//Go语言并不支持关键字enum,但可以使用关键字const创建一组相关的常量,这在概念上类似于枚举
//一组常量的定义方式通常是在关键字const后跟一对圆括号(常量就放在括号内)
//下面是常规的通过枚举的方式定义一个星期中每一天的示例
const (
        Monday = 1 + iota //1
        Tuesday             //2
        Wednesday           //3
        Thursday            //4
        Friday              //5
        Saturday            //6
        Sunday              //7
)
fmt.Println(Monday, Tuesday, Saturday) //输出: 1 2 6

在上述示例中,iota的值会依次自动递增,此值从0开始,所以Monday的值是1,Tuesday的值是2,以此类推。

在各种标准库中,为了方便开发人员使用,会预定义一些常量。例如,使用log包输出日志时,自带的log包默认的输入格式是内容和时间。下面的示例提供了几个很简单的输出选项。

const (
        Ldate         = 1 << iota     //日期示例:2022/07/07
        Ltime                         //时间示例:01:23:45
        Lmicroseconds                 //微秒:01:23:45.000000.
        Llongfile                     //路径+文件名+行号:/a/b/c/d.go:10
        Lshortfile                    //文件名+行号:main.go:10
        LUTC                          //UTC时间格式
        LstdFlags     = Ldate | Ltime //默认
)
 
func init(){
   log.SetFlags(log.Ldate|log.Lshortfile)
}