Go语言const&iota的实现示例

 更新时间:2026年04月13日 09:45:57   作者:Go_error  
本文主要介绍了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是如何读取文件内容的(7种)

    浅谈Golang是如何读取文件内容的(7种)

    这篇文章主要介绍了浅谈Golang是如何读取文件内容的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 详解Golang中errors包如何返回自定义error类型

    详解Golang中errors包如何返回自定义error类型

    这篇文章主要为大家详细介绍了Golang中errors包如何返回自定义error类型,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下
    2023-09-09
  • Go语言net包RPC远程调用三种方式http与json-rpc及tcp

    Go语言net包RPC远程调用三种方式http与json-rpc及tcp

    这篇文章主要为大家介绍了Go语言net包RPC远程调用三种方式分别使用http与json-rpc及tcp的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • jenkins构建go及java项目的方法

    jenkins构建go及java项目的方法

    这篇文章主要介绍了jenkins构建go及java项目,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值了,需要的朋友可以参考下
    2021-04-04
  • Go slice切片make生成append追加copy复制示例

    Go slice切片make生成append追加copy复制示例

    这篇文章主要为大家介绍了Go使用make生成切片、使用append追加切片元素、使用copy复制切片使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go anko实现支持脚本语言

    Go anko实现支持脚本语言

    anko是一个可以让 Go 项目支持脚本语言的小工具,换句话说,就是可以给 Go 项目加点“脚本魔法”,下面就跟随小编一起来学习一下他的具体使用吧
    2024-11-11
  • Golang安装和使用protocol-buffer流程介绍

    Golang安装和使用protocol-buffer流程介绍

    这篇文章主要介绍了Golang安装和使用protocol-buffer过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • mac下golang安装了windows编译环境后编译变慢

    mac下golang安装了windows编译环境后编译变慢

    这篇文章主要介绍了mac下golang安装了windows编译环境后编译变慢的处理方法,非常的简单,有相同问题的小伙伴可以参考下。
    2015-04-04
  • Golang服务的请求调度的实现

    Golang服务的请求调度的实现

    Golang服务请求调度是一种使用Go语言实现的服务请求管理方法,本文主要介绍了Golang服务的请求调度的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • golang 中获取字符串个数的方法

    golang 中获取字符串个数的方法

    这篇文章主要介绍了golang 中获取字符串个数 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08

最新评论