Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go语言const iota

Go语言const&iota的实现示例

作者: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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文