视频: https://www.bilibili.com/video/BV1gN41197Kf/

什么是iota

iota是golang中的一个关键词,只能用于常量的声明中,它在某些方面可以简化常量的声明

下面来看一个例子:

上面代码非常明确,声明a/b/c三个常量,它们的值为0~2。

根据目前已有知识,貌似无法再简化了。但是一旦拥有了iota之后,可以进一步简化:

WTF? 这叫简化?多了好几个字呢 =w=

别着急,还能再一步简化:

因为b与c没有提供初始值,它们与上一行的值和类型都保持一致了(上节的内容)

执行试试看:

通过上面的例子,我们得知,iota是:

  • 一个从0开始计数的计数器(counter)
  • 每增加一行常量,计数加1
  • 只能用于常量的声明中

从1开始计数

iota是从0开始计数的,如果我想声明一组1~7的常量(像星期一至星期天)怎么办?

能让iota从1开始计数吗? 答案是不能,但是有一种巧妙的方法可以声明一组1~7的常量:

因为b没有初始值,它的值等于上一行a的值,而a的值为iota + 1=> 0 + 1,到b这一行iota的值变成了1,所以iota + 1 => 1 + 1。其它同理可得

下面继续介绍另外一个巧妙的方法达到同一目的

跳过某一值

假如我想声明一组常量,值是0、2、4,怎么做?

可以这样做:

还有别的办法吗?有,这里引入空标识符(blank identifier)的知识

空标识符提供一种在赋值中忽略某个值的方法,用下划线(_)表示它,举个例子:

利用空标识符同样可以达到目的:

从1开始计数的例子可以改为:

iota常见误区

iota 只是在同一个 const 常量组内递增,每当有新的 const 关键字时,iota 计数会重新开始

iota 只能用于常量声明中,不能用于变量声明

总结

see ya~

原文地址: https://nbody1996.gitee.io/becoming_gopher/posts/009/

读后有收获可以请作者喝咖啡~