4.const和iota

1.const语法,隐式重复前一个表达式

go中常量在const语法块中实现,const语法提供了一种"隐式重复前一个表达式"的机制,以下面的代码为例,在const语法块中定义了a,b,c,d四个常量。其中a ,b 定义是1,2;c,d并没有初始化,这里根据"隐式重复前一个表达式"机制,c,d 会重复前面的表达式,所以c,d也会定义为1,2

Go 复制代码
package main

import "fmt"

// 1.const语法 隐式重复前一个表达式
const (
	a, b = 1, 2
	c, d // 等价 c,d = 1,2
)

func main() {
	fmt.Printf("a = %v, b = %v\n", a, b)
	fmt.Printf("c = %v, d = %v\n", c, d)
}

2.iota

在const语法的基础上,go为我们提供了iota关键字,iota关键字的作用是在const块中,iota从定义的那一行为0,随后每新增一行,iota累加1,下面的代码中,结合了const中隐式重复前一个表达式和iota自动按行累加2个机制,需要注意的是当H1 = iota显式的写了iota时,iota并没有特殊的从0开始,依然延续前面的iota的逐行累加值。

Go 复制代码
package main

import "fmt"

// 1.const语法 隐式重复前一个表达式
const (
	a, b = 1, 2
	c, d // 等价 c,d = 1,2
)

const (
	// iota = 0 => 0, 10
	Apple, Banana = iota, iota + 10
	// iota = 1 Strawberry, Grape = iota, iota+10 => 1. 11
	Strawberry, Grape
	// iota = 2 Pear, Watermelon = iota, iota + 10 => 2, 12
	Pear, Watermelon

	H1 = iota // iota = 3
	H2        // iota iota = 4
)

func main() {
	fmt.Printf("Apple = %v, Banana = %v\n", Apple, Banana)
	fmt.Printf("Strawberry = %v, Grape = %v\n", Strawberry, Grape)
	fmt.Printf("Pear = %v, Watermelon = %v\n", Pear, Watermelon)
	fmt.Printf("H1 = %v, H2 = %v \n", H1, H2)

	fmt.Printf("a = %v, b = %v\n", a, b)
	fmt.Printf("c = %v, d = %v\n", c, d)
}
相关推荐
dialect_1 小时前
KMP算法
开发语言·c++·算法
jktantan1 小时前
Vue keep-alive 切标签后滚动位置回顶?因为 onDeactivated 里读到的 scrollTop 是 0
前端·javascript·vue.js
总要学点什么2 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
2601_962885722 小时前
quotes 字段全解:涨跌幅、振幅、换手率的口径与单位
java·前端·spring
excel2 小时前
encodeURI 和 encodeURIComponent 有什么区别?
前端
前端精髓3 小时前
调用openrouter的免费API模型
java·前端·javascript
赛博守夜人3 小时前
AI安全攻防与治理之十四:AI 安全测试不能脱离传统安全,Web、API、移动端与模型攻击面的组合拳
前端·人工智能·安全
开开心心_Every3 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c3 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
吴卫斌3 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化