Golang - 枚举iota的使用

在编程领域里,枚举是用来表示只包含有限数量的固定值的类型,在开发中一般用于标识错误码或者状态机。拿一个实体对象的状态机来说,它通常与这个对象在数据库里对应记录的标识状态的字段值相对应。

举例:使用魔术数字进行判断,要置顶一个文章的时候先判断文章是不是已发布状态。

if (state == 2) {
   // state 2 代表文章已发布
}

1、iota是什么

  iota是常量的计数器,可理解为const定义常量的行数的索引,注意是行数。

  const中每新增一行常量声明将使iota计数一次,前提是iota在const中出现

2、应用场景

  一般用于枚举数据

3、易错点

  因为iota一般出现在const语句块的第一行,不少初学者会将之认为iota就是0,这是不对的。

  准确的说:iota出现在const语句块中的第几行,那值就是几,当然这里的行数的索引也是以0为开始。

4、枚举与常量的区别【iota能使用提高程序可读性,严谨性】

  使用 const 同样可以实现枚举的效果,但没有枚举优雅,而且 const 并不能保证常量集的值是唯一的,比如 Wednesday int = 1 编译器也不会报错,但是程序可能会出现 Bug。通过使用枚举(const + iota),编译器层面保证了常量集里不会有相同的值。

复制代码
const (
    a = iota    // 0
    b           // 1
    c           // 2
)
 
const (
    x = 1       // 1
    y = iota    // 1
    z           // 2
)
 
// 为什么c1不是2? 因为b1为100,按照golang常量定义的简便写法,所以c1为100
const (
    a1 = iota  //0
    b1 = 100   //100
    c1      //100
    d1 = iota  //3
    e1      //4
)
//func main() {
// fmt.Println(a, b, c)
// fmt.Println(x, y, z)
// fmt.Println(a1, b1, c1, d1, e1)     
//}
复制代码
golang常量定义的简便写法:
const (
    b3 = 88  // 88
    b7    // 88
    b6    // 88
)

 注意:

1)iota是一个特殊常量,可认为是一个能被编译器修改的常量,如果只使用普通的常量const定义后是不会被修改的;

2)iota 只能配合const()一起使用,iota只有在const进行才有累加效果;
3)iota 在const关键字出现时将被重置为0,const中每新增一行常量声明将使 iota 计数加1,因此iota可作为const 语句块中的行索引;

4)常量只定义不使用,编译不会报错。

总结:

  枚举定义了一组有限的常量集,像 C++、java 等语言有 enum 关键字来定义枚举类型,但是 Go 并没有提供枚举关键字来定义枚举类型,可以利用 const + iota 来达到枚举的效果。同时很多开发者会忽略枚举的使用,因为枚举并不是必须使用的,完全可以直接常量来替代,但枚举的使用提高程序可读性,严谨性等,所以在项目中使用枚举最好能够了解枚举的使用场景以及一些特定用法。

 

posted @   李若盛开  阅读(150)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示