常量的定义

常量是一个简单值的标识符,在程序运行时,不会被修改的量。

例如数学中的,π:3.1415926

显式类型定义: const b string = "abc"
隐式类型定义: const b = "abc"
package main

import "fmt"

func main() {
   const LENGTH int = 10
   const WIDTH int = 5   
   var area int
   const a, b, c = 1, false, "str" //多重赋值

   area = LENGTH * WIDTH
   fmt.Printf("面积为 : %d", area)
   fmt.Println(a, b, c)   
}
tuple
const (
    Unknown = 0
    Female = 1
    Male = 2
)

常量组中如不指定类型和初始化值,则与上一行非空常量右值相同

package main

import (
	"fmt"
)

func main() {
	const (
		x uint16 = 16
		y  // 与上一行的类型和值一样  16
		s = "abc"
		z  // 与上一行的类型和值一样 "abc"
	)
	fmt.Printf("%T,%v\n", y, y)
	fmt.Printf("%T,%v\n", z, z)
}

常量的注意事项:

  • 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型
  • 不曾使用的常量,在编译的时候,是不会报错的
  • 显示指定类型的时候,必须确保常量左右值类型一致,需要时可做显示类型转换。这与变量就不一样了,变量是可以是不同的类型值
iota
iota
iota
const (
    a = iota
    b = iota
    c = iota
)
iotaiota
const (
    a = iota
    b
    c
)
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)
}

输出:

0 1 2 ha ha 100 100 7 8
iota
 const (
	// 逐行 + 1
    a = iota   //0
    b          //1
    c,d = iota, iota // c=3,d=3
    e 		// e=4
)

自增默认是int类型,可以自行进行显示指定类型
数字常量不会分配存储空间,无须像变量那样通过内存寻址来取值,因此无法获取地址

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

constiota
const a = iota // a=0
const (
  b = iota     //b=0
  c            //c=1   相当于c=iota
)