Go语言中的iota关键字的使用

 更新时间:2023年08月31日 15:46:12   作者:fliter  
这篇文章主要为大家详细介绍了Go语言中的iota关键字的相关使用,文中的示例代码讲解详细,对我们深入了解Go语言有一定的帮助,需要的可以参考下

基本使用

示例

package main
import "fmt"
const a0 = iota // a0 = 0  // const出现, iota初始化为0
const (
	a1 = iota // a1 = 0   // 又一个const出现, iota初始化为0
	a2 = iota // a2 = 1   // const新增一行, iota 加1
	a3 = 6    // a3 = 6   // 自定义一个常量
	a4        // a4 = 6   // 不赋值就和上一行相同
	a5 = iota // a5 = 4   // const已经新增了4行, 所以这里是4
)
const (
	b = iota // b = 0
	c        // c = 1
	d = 1111
	e
	f = iota
)
const (
	TestMin = -1
	TestA
	TestB = iota
	TestC
)
func main() {
	fmt.Println("a0:", a0)
	fmt.Println("a1:", a1)
	fmt.Println("a2:", a2)
	fmt.Println("a3:", a3)
	fmt.Println("a4:", a4)
	fmt.Println("a5:", a5)
	fmt.Println("---------")
	fmt.Println("b is:", b)
	fmt.Println("c is:", c)
	fmt.Println("d is:", d)
	fmt.Println("e is:", e)
	fmt.Println("f is:", f)
	fmt.Println("---------")
	fmt.Println("TestMin:", TestMin)
	fmt.Println("TestA:", TestA)
	fmt.Println("TestB:", TestB)
	fmt.Println("TestC:", TestC)
}

输出为:

a0: 0
a1: 0
a2: 1
a3: 6
a4: 6
a5: 4
---------
b is: 0
c is: 1
d is: 1111
e is: 1111
f is: 4
---------
TestMin: -1
TestA: -1
TestB: 2
TestC: 3

示例 

package main
import "fmt"
// 跳值使用iota使用_来达到目的:
const (
	h = iota // 0
	i = iota // 1
	_
	k = iota // 3
)
// 当常量表达式为空时,会自动继承上一个存在非空的表达式。
const (
	x = iota * 2
	y
	z
)
func main() {
	fmt.Println(h)
	fmt.Println(i)
	fmt.Println(k)
	fmt.Println("-------")
	fmt.Println(x)
	fmt.Println(y)
	fmt.Println(z)
}

输出为

0
1
3
-------
0
2
4

用来定义枚举值

package main
import "fmt"
type OrderState uint8
const (
	// 0-待支付
	WaitPay OrderState = iota
	// 1-支付中
	Paying
	// 2-支付成功
	PaySucc
	// 3-支付失败
	PayFail
)
// 对应于xx表is_show字段
const (
	_       uint8 = iota
	Show          // 1-显示
	NotShow       // 2-不显示
)
func main() {
	fmt.Println(PaySucc)
	fmt.Println(Show)
}

输出为

2
1

高阶用法

package main
import (
	"fmt"
)
const (
	i = 1 << iota
	j = 3 << iota
	k
	l
)
func main() {
	fmt.Println("i=", i)
	fmt.Println("j=", j)
	fmt.Println("k=", k)
	fmt.Println("l=", l)
}

输出为

i= 1
j= 6
k= 12
l= 24

iota每出现一次,自动加1;而前面的操作数如果不指定,默认使用上一个的,在这里是3;

    i=1<<iota
    j=3<<iota
    k
    l

等价于

    i=1<<0
    j=3<<1
    k=3<<2
    l=3<<3

又如

package main
import "fmt"
func main() {
	const (
		IgEggs         = 1 << iota // 1 << 0 which is 00000001
		IgChocolate                // 1 << 1 which is 00000010
		IgNuts                     // 1 << 2 which is 00000100
		IgStrawberries             // 1 << 3 which is 00001000
		IgShellfish                // 1 << 4 which is 00010000
	)
	fmt.Println(IgEggs, IgChocolate, IgNuts, IgStrawberries, IgShellfish)
}

输出为

1 2 4 8 16

每次可以左移一位,因此对于定义数量级大有裨益

package main
import "fmt"
type ByteSize int64
const (
	_           = iota             // ignore first value by assigning to blank identifier
	KB ByteSize = 1 << (10 * iota) // 1 << (10*1)
	MB                             // 1 << (10*2)
	GB                             // 1 << (10*3)
	TB                             // 1 << (10*4)
	PB                             // 1 << (10*5)
	EB                             // 1 << (10*6)
	//ZB                             // 1 << (10*7)
	//YB                             // 1 << (10*8)
)
func main() {
	fmt.Printf("KB= %d Byte\n", KB)
	fmt.Printf("MB= %d Byte\n", MB)
	fmt.Printf("GB= %d Byte\n", GB)
}

输出为

KB= 1024 Byte
MB= 1048576 Byte
GB= 1073741824 Byte

以上就是Go语言中的iota关键字的使用的详细内容,更多关于Go iota的资料请关注脚本之家其它相关文章!

相关文章

  • golang 切片的三种使用方式及区别的说明

    golang 切片的三种使用方式及区别的说明

    这篇文章主要介绍了golang 切片的三种使用方式及区别的说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • golang 实现Location跳转方式

    golang 实现Location跳转方式

    这篇文章主要介绍了golang 实现Location跳转方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Go语言泛型打造优雅的切片工具库

    Go语言泛型打造优雅的切片工具库

    泛型是一种编程范式,允许开发者在编写代码时定义通用的类型参数,而不是具体的类型,本文将使用泛型实现打造优雅的切片工具库,希望对大家有所帮助
    2025-02-02
  • Golang time包中的函数用法详解

    Golang time包中的函数用法详解

    在日常开发过程中,会频繁遇到对时间进行操作的场景,使用 Golang 中的 time 包可以很方便地实现对时间的相关操作,接下来的几篇文章会详细讲解 time 包,本文讲解一下 time 包中的函数,需要的朋友可以参考下
    2023-08-08
  • Go语言中通过Lua脚本操作Redis的方法

    Go语言中通过Lua脚本操作Redis的方法

    这篇文章主要给大家介绍了关于Go语言中通过Lua脚本操作Redis的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-01-01
  • golang使用DockerFile正确用法指南

    golang使用DockerFile正确用法指南

    docker在开发和运维中使用的场景越来越多,作为开发人员非常有必要了解一些docker的基本知识,而离我们工作中最近的也就是对应用的docker部署编排了,这篇文章主要给大家介绍了关于golang使用DockerFile的正确用法指南,需要的朋友可以参考下
    2024-03-03
  • GoLang OS包以及File类型详细讲解

    GoLang OS包以及File类型详细讲解

    go中对文件和目录的操作主要集中在os包中,下面对go中用到的对文件和目录的操作,做一个总结笔记。在go中的文件和目录涉及到两种类型,一个是type File struct,另一个是type Fileinfo interface
    2023-03-03
  • go nil处理如何正确返回nil的error

    go nil处理如何正确返回nil的error

    这篇文章主要为大家介绍了go中的nil处理,如何正确返回nil的error实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Goland字符串格式化样式中“\r“的作用详解

    Goland字符串格式化样式中“\r“的作用详解

    这篇文章主要介绍了Goland字符串格式化样式中“\r“的作用,"\r"起的作用是回到行首,当前控制台输出,输出完以后回到当前行的行首,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Golang拾遗之指针和接口的使用详解

    Golang拾遗之指针和接口的使用详解

    拾遗主要是收集和golang相关的琐碎知识,这篇文章主要是为大家整理了Golang中指针和接口的使用方法,文中的示例代码讲解详细,需要的可以参考一下
    2023-02-02

最新评论