golang中iota的用法小结

 更新时间:2025年03月04日 10:17:03   作者:SLM的智慧  
iota是Go语言中的一个预定义标识符,用于表示const声明块中每个常量的偏移值,本文主要介绍了golang中iota的用法小结,具有一定的参考价值,感兴趣的可以了解一下

iota是Go语言的一个预定义标识符,它表示的是const声明块(包括单行声明)中每个常量所处位置在块中的偏移值(从零开始)。同时,每一行中的iota自身也是一个无类型常量,可以像无类型常量那样自动参与不同类型的求值过程,而无须对其进行显式类型转换操作。

1.使用实例说明

// $GOROOT/src/sync/mutex.go (go 1.12.7)
const (
    mutexLocked = 1 << iota
    mutexWoken
    mutexStarving
    mutexWaiterShift = iota
    starvationThresholdNs = 1e6
)

iota在第一行出现,iota在第一行即位0,在第二行即位1,在第三行即位2,在第四行即位3…

mutexLocked = 1 << iota:这里是const声明块的第一行,iota的值是该行在const块中的偏移量,因此iota的值为0,我们得到mutexLocked这个常量的值为1 << 0,即1。mutexWoken:这里是const声明块的第二行,由于没有显式的常量初始化表达式,根据const声明块的“隐式重复前一个非空表达式”机制,该行等价于mutexWoken = 1 <<iota。由于该行是const块中的第二行,因此偏移量iota的值为1,我们得到mutexWoken这个常量的值为1<< 1,即2。mutexStarving:该常量同mutexWoken,该行等价于mutexStarving = 1 << iota,由于在该行的iota的值为2,因此我们得到mutexStarving这个常量的值为 1 << 2,即4。mutexWaiterShift = iota:这一行的常量初始化表达式与前三行不同,由于该行为第四行,iota的偏移值为3,因此mutexWaiterShift的值就为3。位于同一行的iota即便出现多次,其值也是一样的

2.常用方式

const (
    _ = iota
    Blue
    Black
    Red
    Yellow
)

默认Blue=1,之后如果新加其他常量,不需要赋值,会自动累加

参考图书《Go语言精进之路》,可以抽空翻翻,提高基础知识,也会有新的收获

到此这篇关于golang中iota的用法小结的文章就介绍到这了,更多相关golang iota用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go正则表达式匹配字符串,替换字符串方式

    Go正则表达式匹配字符串,替换字符串方式

    介绍了Go语言中使用正则表达式进行字符串匹配和替换的方法,包括匹配单个子字符串和所有子字符串,个人经验分享,旨在为读者提供实用的编程技巧,并鼓励大家支持脚本之家
    2025-02-02
  • 一些关于Go程序错误处理的相关建议

    一些关于Go程序错误处理的相关建议

    错误处理在每个语言中都是一项重要内容,众所周知,通常写程序时遇到的分为异常与错误两种,Golang中也不例外,这篇文章主要给大家介绍了一些关于Go程序错误处理的相关建议,需要的朋友可以参考下
    2021-09-09
  • 关于Golang获取当前项目绝对路径的问题

    关于Golang获取当前项目绝对路径的问题

    这篇文章主要介绍了Golang获取当前项目绝对路径的问题,通常的做法是go run用于本地开发,用一个命令中快速测试代码确实非常方便;在部署生产环境时,我们会通过go build构建出二进制文件然后上传到服务器再去执行,那么会产生什么问题呢?感兴趣的朋友一起看看吧
    2022-04-04
  • 基于Golang开发一个轻量级登录库/框架

    基于Golang开发一个轻量级登录库/框架

    几乎每个项目都会有登录,退出等用户功能,而登录又不单仅仅是登录,我们要考虑很多东西。所以本文就来用Golang开发一个轻量级登录库/框架吧
    2023-05-05
  • golang数组内存分配原理

    golang数组内存分配原理

    这篇文章主要介绍了golang数组内存分配原理,数组是内存中一片连续的区域,在声明时需要指定长度,文章围绕主题展开详细的内容介绍,感兴趣的小伙伴可以参考一下
    2022-06-06
  • GoLang sync.Pool简介与用法

    GoLang sync.Pool简介与用法

    这篇文章主要介绍了GoLang sync.Pool简介与用法,Pool是可伸缩、并发安全的临时对象池,用来存放已经分配但暂时不用的临时对象,通过对象重用机制,缓解GC压力,提高程序性能
    2023-01-01
  • Go语言实现一个Http Server框架(二) Server的抽象

    Go语言实现一个Http Server框架(二) Server的抽象

    上一篇文章对http库的基本使用做了说明,这篇文章主要介绍了如何实现一个简单地httpServer,文中代码示例非常详细,感兴趣的朋友可以参考下
    2023-04-04
  • Golang中的map操作方法详解

    Golang中的map操作方法详解

    这篇文章主要给大家介绍了关于Golang中map操作方法的相关资料,map是一种无序的基于key-value的数据结构,Go语言中map是引用类型,必须初始化才能使用,需要的朋友可以参考下
    2023-11-11
  • Golang必知必会之Go Mod命令详解

    Golang必知必会之Go Mod命令详解

    go mod可以使项目从GOPATH的强制依赖中独立出来,也就是说你的项目依赖不再需要放在在GOPATH下面了,下面这篇文章主要给大家介绍了关于Golang必知必会之Go Mod命令的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 学会提升Go语言编码效率技巧拒绝加班!

    学会提升Go语言编码效率技巧拒绝加班!

    这篇文章主要为大家介绍了Go语言编码效率提升技巧详解,学会了从此拒绝加班,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论