【golang长途旅行第33站】常量------补充知识点
常量
使用说明
- 常量使用
const
修饰 - 常量在定义时必须初始化
- 常量不能修改
- 常量只能修饰
bool
、数值类型(int
、float
系列)、string
类型 - 语法:
const identifier [type] = value
- Golang 没有强制要求常量名必须全大写
- 不能出现const c = a / 2
(除非a也是常量,否则,c就会因为a的改变而改变,违背常量定义)
声明方式
const (
a = iota //直接将a赋值为0
b //逐行加一,b=a+1
c //逐行加一,c=b+1
)
不得不提到iota的用法了
const (
a = iota // 0
b // 1
c // 2
)
// 更复杂的 iota 用法
const (
_ = iota // 忽略第一个值 0
KB = 1 << (10 * iota) // 1 << 10 = 1024
MB // 1 << 20 = 1048576
GB // 1 << 30 = 1073741824
)
// 重置 iota
const (
A = iota // 0
B // 1
)
const (
C = iota // 0 (每个 const 块都会重置 iota)
D // 1
)
const (
a = 10
b = 1
c = 2
)
使用细节
1. 类型化常量 vs 无类型常量
const a int = 10 // 有类型常量
const b = 10 // 无类型常量(更灵活)
// 无类型常量的优势
var x float64 = 10 // 允许:无类型常量 10 可赋值给 float64
var y int = 10.0 // 错误:10.0 是无类型浮点常量,不能直接赋给 int
2. 常量必须能在编译期确定值
const a = len(“hello”) // 允许:len 在编译期可确定
// const b = len(os.Args) // 错误:os.Args 在运行时才能确定