Go语言const&iota的实现示例
part 1.
要明白 iota 首先需要知道:Go 的 const 语法提供了“隐式重复前一个非空表达式”的机制。
const ( A = 1 // 1 B // 1 C // 1 )
常量定义的后两行没有显式给予初始赋值,Go 编译器将为其隐式使用第一行的表达式。
part 2.
iota 是 Go 语言的一个预定义标识符,它表示的含义是 const 声明块中每个常量所处位置在块中的偏移值,从0开始(也可理解为 const 语句块中的行索引)。
// 一般写法 const ( Sunday = 0 Monday = 1 Tuesday = 2 Wednesday = 3 Thursday = 4 Friday = 5 Saturday = 6 ) // iota 写法 const ( Sunday = iota Monday Tuesday Wednesday Thursday Friday Saturday )
来看下面这个例子:
const ( A = iota - 1 // -1 由于这里是 const 声明块的第一行,iota 的值是该行在 const 块中的偏移,因此 iota 的值为 0 B // 0 C // 1 D = iota // 3 由于该行为第四行,iota 的偏移值为 3 E // 4 )
略过 iota = 0,从 iota = 1 开始正式定义枚举常量:
const ( _ = iota A // 1 B // 2 C // 3 )
位于同一行的 iota 即便出现多次,其值也是一样的:
const ( _ = iota A, PI1 = iota, 3.14 / (2 * iota) // 1, 3.14 / (2 * 1) B, PI2 // 2, 3.14 / (2 * 2) C, PI3 // 3, 3.14 / (2 * 3) )
略过某一行:
const ( _ = iota A // 1 B // 2 C // 3 _ E // 5 )
使用有类型枚举常量保证类型安全:
如果要严格考虑类型安全,可以定义有类型枚举常量,比如上述代码的 Sunday~Saturday:
type Weekday int const ( Sunday Weekday = iota Monday Tuesday Wednesday Thursday Friday Saturday )
这样,后续要使用 Sunday~Saturday 这些有类型枚举常量,必须匹配 Weekday 类型的变量。
到此这篇关于Go语言const&iota的实现的文章就介绍到这了,更多相关Go语言const iota内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
详解Golang中errors包如何返回自定义error类型
这篇文章主要为大家详细介绍了Golang中errors包如何返回自定义error类型,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下2023-09-09
Go语言net包RPC远程调用三种方式http与json-rpc及tcp
这篇文章主要为大家介绍了Go语言net包RPC远程调用三种方式分别使用http与json-rpc及tcp的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助2021-11-11
Go slice切片make生成append追加copy复制示例
这篇文章主要为大家介绍了Go使用make生成切片、使用append追加切片元素、使用copy复制切片使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-06-06
Golang安装和使用protocol-buffer流程介绍
这篇文章主要介绍了Golang安装和使用protocol-buffer过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-09-09


最新评论