iota常量计数器

本文探讨了Go语言中的iota常量计数器,讲解了如何使用iota实现关键字枚举、自定义枚举、跳过枚举、创建掩码表达式、定义数量级以及一行多定义等技巧。通过实践和探索,加深对iota特性的理解。
摘要由CSDN通过智能技术生成

iota是go语言中的常量计数器,只能在常量表达式中用。iota在const关键字出现时重置为0,然后const中每新增一条数据,iota计数一次

关键字实现枚举

package main

import "fmt"

const(
	a = iota
	b
	c
	d,e,f = iota , iota , iota
	g = iota
	h = "h"
	i = iota
	j = iota
)
const z = iota
func main() {
	fmt.Println(a,b,c,d,e,f,g,h,i,j)
}
首先,定义一个常量 a = iota ,因为 const 出现了,iota 默认为 0 ,所以 a = 0.
依次递增 b = 1 ,c = 2 ,d e f 为同一级,递增到这里时,iota值跟新为了3, 所以
d e f 都等于 3 ,接下来继续递增 g = 4 ,原本 h 应该等于 5 但是定义了 h = “h” ,
所以这里 h 是 5 ,但会显示 “h” ,依然算一位,接下来 i = 6 ,j = 7 。

自定义实现枚举

package main

import "fmt"

type kaigll int

const(
	tyk kaigll = iota
	tyka
	tykb
	tykc
	tykd
)

func main () {
	fmt.Println("tyk = ",tyk)
	fmt.Println("tyka = ",tyka)
	fmt.Println("tykb = ",tykb)
	fmt.Println("tykc = ",tykc)
	fmt.Println("tykd = ",tykd)
}
自定义一个变量 kaigll ,类型是 int ,因为关键字 const 的出现,iota 将重置为 0 ,
所以 tyk = 0 ,依次往下递增,tyka = 1 ,tykb = 2 ,tykc = 3 , tykd = 4 。

可跳过枚举

package main

import "fmt"

type kaigl int

const(
	typk kaigl = iota
	typka
	typkb
	_
	_
	typkc
	typkd
)
func main() {
	fmt.Println("typk = ",typk)
	fmt.Println("typka = ",typka)
	fmt.Println("typab = ",typkb)
	fmt.Println("typkc = ",typkc)
	fmt.Println("typkd = ",typkd)
}
这个和上面的那个差不多,iota 遇见 const 重置为 0 ,再赋给提前声明好的自定义变量上,
接下来依次递增,里面那个符号是下划线,起着占位符的作用,虽然没有被赋值,但是同样
也占着那个位置应有的值,所以 typk = 0 ,typka = 1 ,typkb = 2 ,typkc = 5 ,typkd = 6

掩码表达式

package main

import "fmt"

type kh666 int

const(
	kh kh666 = 1 << iota
	kha
	khb
	khc
	khd
)

const(
	khe kh666 = 16 >> iota
	khf
	khg
	khh
	khi
)

func main() {
	fmt.Println("NO.1:",kh)
	fmt.Println("NO.2:",kha)
	fmt.Println("NO.3:",khb)
	fmt.Println("NO.4:",khc)
	fmt.Println("NO.5:",khd)
	fmt.Println("NO.6:",khe)
	fmt.Println("NO.7:",khf)
	fmt.Println("NO.8:",khg)
	fmt.Println("NO.9:",khh)
	fmt.Println("NO.10:",khi)
}
与上同理,将 “1” 转换为二进制为:“0001” ,若将 “0001” 向右移 “0” 位 ,结果还为 “0001”
转换回来,还为 “1” ,那么以此类推,kha 是将 “0001” 向左移动 “1”位,那么就变成了 “0010” 
转换回来,成为 “2” ,khb = 0100 = 4 ,khc = 1000 = 8 ,khd = 0001 0000 = 16 。
接下来这些都是向左移的,上面是升序,这就是降序了。

定义数量级

package main

import "fmt"

type kaihuang int

const(
	_ kaihuang = iota
	KB kaihuang = 1 << ( 10 * iota)
	MB
	GB
	TB
	PB
	EB
)

func main() {
	fmt.Println("KB:",KB)
	fmt.Println("MB:",MB)
	fmt.Println("GB:",GB)
	fmt.Println("TB:",TB)
	fmt.Println("PB:",PB)
	fmt.Println("EB:",EB)
}
这个和上面的掩码表达式差不多,这个是更高级的运算,KB kaihuang = 1 << ( 10 * iota ) 这
个的意思就是将 0001 中的 1 向左移动 10 * 1 位,最终结果就是 0100 0000 0000 转换过来就
是 1024 ,下面的同理,我就不一一敲了。

一行多定义

package main

import "fmt"

const(
	Jerry , Marry = iota + 1 , iota + 2
	play , stady
	jump , run
)
func main() {
	fmt.Println("Jerry:",Jerry)
	fmt.Println("Marry:",Marry)
	fmt.Println("play:",play)
	fmt.Println("stady:",stady)
	fmt.Println("jump:",jump)
	fmt.Println("run:",run)
}
这个多赋值其实也很好理解一个变量对应一个值,那么多个变量依次往下对应多个值,
Jerry对应iota+1也就是0+1,Marry对应iota+2,也就是0+2,接着往下piay对应iota+1
这时的iota变为了1,也就变成了1+1,对应的stady也就成了1+2,往下推就更简单了。

其实这些都不难,主要是多想,多练,多探索!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值