相对于变量而言,常量是在程序使用过程中,不会改变的数据。有些地方你需要将定义好的常量重复使用,代码中你不允许它的值改变。例如 圆周率 在程序执行过程中不会改变。
常量的声明const Pi float64 = 3.14
constPifloat643.14
多变量声明
const (
Pi float64 = 3.14 // 定义常量 Pi 类型为 float64 值为 3.14
Pi2 // 未定义类型和值默认取上一条类型和值
Age = 18 // 重新定义类型和值时为 int 值为 18
)
pi2piAgeint18Age2Age2Age
常量的作用域
常量只能在其声明的范围内使用,如果在一个函数内部作用域中声明的常量与外部名称相同,则只能用自己内部的常量,它将忽略外部的常量。例如:
package main
import "fmt"
// 定义了一个全局常量
const Pi float64 = 3.14
func main() {
// 在 main 函数中定义了一个局部常量
const Pi float64 = 3.1415
// 优先使用局部常量
fmt.Println(Pi)
myfunc()
}
func myfunc() {
// 这里是用全局常量
fmt.Println(Pi)
}
总结一下
- 常量数值不能修改。
- 常量定义后可以不使用。
- 常量定义不能使用简短定义方式。
- 常量种使用的数据类型只能是 整型、布尔、浮点、复数、字符串类型。
iotaiota
package main
import "fmt"
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)
}
iota如何使用
enumconstiota
package main
import (
"fmt"
)
type Mytype int
//定义一个常量 来模拟枚举类型 Spring设置为iota为值默认就是 0
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
numberOfDays
)
func main() {
//打印定义的常量枚举信息Tuesday 值2
fmt.Printf("%v\n", Tuesday) //2
}
有趣的的 iota 实例
package main
import "fmt"
const (
i=1<<iota
j=3<<iota
k
l
)
func main() {
fmt.Println("i=",i)
fmt.Println("j=",j)
fmt.Println("k=",k)
fmt.Println("l=",l)
}
以上实例运行结果为:
i= 1
j= 6
k= 12
l= 24
iotai=1<<0j=3<<1i=1j=6k=3<<2l=3<<3
简单表述:
- i=1:左移 0 位,不变仍为 1;
- j=3:左移 1 位,变为二进制 110, 即 6;
- k=3:左移 2 位,变为二进制 1100, 即 12;
- l=3:左移 3 位,变为二进制 11000,即 24。
<>>>>>