golang之iota常量与枚举标识


iota是Golang中提供的一个简化常量和枚举编程的标识符。

常量

常量是一个简单值的标识符,在程序运行时,不会被修改的量。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型,及其派生类型。
const identifier [type] = value

模拟枚举类型示例:

type MsgMode int

const (
	Invalid MsgMode = iota
	Init
	Add
	Remove
)

iota标识

iota常用于const表达式中,其值从0开始,每增加一行其值自增1:

  • iota代表const声明块中的行索引(一行中多次引用iota,其值也是相同的);
  • 第一个常量必须指定一个常量表达式,后续常量若没有表达式,则继承上一行的;

每行单个iota

当常量没有对应表达式时,会继承上一行的:

  • second继承first的iota,为1;
  • forth继承third的=10,为10;
  • six继承five的iota表达式,为15;

如(10,five为4*3, six为5*3):

const (
	first = iota
	second
	third = 10
	forth
	five = iota * 3
	six
)

// 0 1 10 10 12 15  

每行多个iota

每行有多个iota,同一行中的iota值是相同的;此时后续各行也要有相同数量的const常量值定义

const (
	bit0, mask0 = 1 << iota, 1<<iota - 1
	bit1, mask1
	_, _
	bit3, mask3
)
const (
	mutexLocked = 1 << iota // mutex is locked
	mutexWoken
	mutexStarving
	mutexWaiterShift = iota
	mutexWaiterLast
)

func ShowIota() {
	fmt.Println("bits & masks:")
	fmt.Println("\t", bit0, mask0)
	fmt.Println("\t", bit1, mask1)
	fmt.Println("\t", bit3, mask3)

	fmt.Println("Mutex:")
	fmt.Printf("\t Locked:%v, Woken:%v, Starv:%v\n", mutexLocked, mutexWoken, mutexStarving)
	fmt.Printf("\t Shift:%v, Last:%v\n", mutexWaiterShift, mutexWaiterLast)
}


// bits & masks:
//          1 0                       
//          2 1                       
//          8 7                       
// Mutex:                             
//          Locked:1, Woken:2, Starv:4
//          Shift:3, Last:4      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值