Go 常量

系列文章目录

上一篇:Go 变量
下一篇:Go 基本数据类型



前言

如果名称指代的内存位置应该具有 不能更改的固定值,则可以使用 const 关键字


一 声明常量

const 关键字 将变量声明为 只读,这意味着它是 不可更改且只读的。语法如下

const CONSTNAME Type = value

常量的值必须在声明时赋初始值,声明完成之后不允许修改。常量

Go 常量的声明与变量非常相似。区别在于声明常量使用 const 关键字,并且在声明时就必须初始化

  • 可以声明多个常量
  • 也可以 让编译器自动推导常量的类型

下面是一个在 Go 中声明常量的例子

package main  
  
import "fmt"  
  
const PI float64 = 3.1415926  // 声明一个常量,让编译器从初始值推导类型
  
func main() {  
    fmt.Println(PI)  
}

二 声明多个常量

为了便于阅读,可以将多个常量分组到一个块中

package main

import "fmt"

const (
	A int = 1     // 指定常量的类型
	B     = 3.14  // 编译器自动推导类型为 float64
	C     = "Hi!" // 类型自动推导为 string
)

func main() {
	fmt.Println(A)
	fmt.Println(B)
	fmt.Println(C)
}

const 同时声明多个常量时,如果省略了值则表示和上面一行的值相同

package main

import "fmt"

const (
	k = 1 // 开始值
	m     // 默认为上一项 k 的值 1
	g
	t = 2 // 新的值
	p     // 默认为上一项 t 的值 2
	q
)

func main() {
	fmt.Println(k, m, g, t, p, q) // 1 1 1 2 2 2
}

iota 常量计数器

iotago 语言的 常量计数器只能在常量的表达式中使用

iota 在 const 关键字出现时将被重置为 0const每新增一行常量声明将使iota 计数一次(加 1)

  • iota可理解为const语句块中的 行索引

使用iota能简化定义, 在定义枚举时很有用

package main

import "fmt"

func main() {
	const (
		n1 = iota // 0 const 出现 iota 初始化为 0
		n2        // 1
		n3        // 2
		n4        // 3
		n5        // 4
	)
	fmt.Println(n1, n2, n3, n4, n5)

	const (
		b1 = iota // 0  const 出现 iota 被重置为 0
		b2        // 1
		_  = iota // 2 该值被跳过
		b3        // 3
	)
	fmt.Println(b1, b2, b3)

	const (
		c1 = iota // 0
		c2 = 100  // 100
		c3        // 100
		c4 = iota // 3
		c5        // 4
	)
	fmt.Println(c1, c2, c3, c4, c5)

	const (
		d1, d2 = iota + 1, iota + 2 // d1 = 1, d2 = 2  iota=0
		d3, d4 = iota + 1, iota + 2 // d3 = 2, d4 = 3  iota=1
		d5, d6                      // d5 = 3, d6 = 4  iota=2
	)
	// const 一出现,iota 就被重置为 0
	// const 中的变量没增加一行,iota 的值就加 1
	fmt.Println(d1, d2, d3, d4, d5, d6)
	
	const (
		a = 1 << iota // 1 << iota
		b             // 1 << iota
		c             // 1 << iota
		d             // 1 << iota
	)
	fmt.Println(a, b, c, d)       // 1 2 4 8
}

3.1 一个小应用

定义数量级 这里的 << 表示 左移操作1 << 10表示将 1 的二进制表示向左移 10 位, 也就是由 1 变成了 0b10000000000,也就是十进制的 1024。 同理 2<<2 表示将 2 的二进制表示向左移 2 位,也就是由 0b10 变成了 0b1000, 也就是十进制的 8

package main
import "fmt"
func main()  {
	const (
		_ = iota
		KB = 1 << (10 * iota)  // 1 << 2^10
		MB = 1 << (10 * iota)  // 1 << 2^20
		GB = 1 << (10 * iota)  // 1 << 2^30
		TB = 1 << (10 * iota)  // 1 << 2^40
		PB = 1 << (10 * iota)  // 1 << 2^50
	)
	fmt.Println(KB, MB, GB, TB, PB)
}

总结

本节介绍如何在 Go 中声明常量、以及一个 iota 常量计数器

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程进阶之路

感谢打赏, 谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值