常量

相对于变量而言,常量是在程序使用过程中,不会改变的数据。有些地方你需要将定义好的常量重复使用,代码中你不允许它的值改变。例如 圆周率 在程序执行过程中不会改变。

常量的声明
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)
}
总结一下
  • 常量数值不能修改。
  • 常量定义后可以不使用。
  • 常量定义不能使用简短定义方式。
  • 常量种使用的数据类型只能是 整型、布尔、浮点、复数、字符串类型。
iota 特殊的常量
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。
<>>>>>