常量用作枚举:
const ( Unknown = 0 Female = 1 Male = 2 )
数字 0
、1
和 2
分别代表未知性别、女性和男性。这些枚举值可以用于测试某个变量或常量的实际值,比如使用 switch/case 结构。
在这个例子中,iota
可以被用作枚举值:
const ( a = iota b = iota c = iota )
第一个 iota
等于 0,每当 iota
在新的一行被使用时,它的值都会自动加 1,并且没有赋值的常量默认会应用上一行的赋值表达式:
// 赋值一个常量时,之后没赋值的常量都会应用上一行的赋值表达式 const ( a = iota // a = 0 b // b = 1 c // c = 2 d = 5 // d = 5 e // e = 5 ) // 赋值两个常量,iota 只会增长一次,而不会因为使用了两次就增长两次 const ( Apple, Banana = iota + 1, iota + 2 // Apple=1 Banana=2 Cherimoya, Durian // Cherimoya=2 Durian=3 Elderberry, Fig // Elderberry=3, Fig=4 ) // 使用 iota 结合 位运算 表示资源状态的使用案例 const ( Open = 1 << iota // 0001 Close // 0010 Pending // 0100 ) const ( _ = iota // 使用 _ 忽略不需要的 iota KB = 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) )
( 注:关于 iota
的使用涉及到非常复杂多样的情况,因为很难对 iota
的用法进行直观的文字描述。)
iota
也可以用在表达式中,如:iota + 50
。在每遇到一个新的常量块或单个常量声明时, iota
都会重置为 0( 简单地讲,每遇到一次 const 关键字,iota
就重置为 0 )。
当然,常量之所以为常量就是恒定不变的量,因此我们无法在程序运行过程中修改它的值;如果你在代码中试图修改常量的值则会引发编译错误。