【从零开始捡起GO】4. 常量

常量

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

常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。(简单类型)

定义常数

常量定义的关键字是const

定义方式:const 常量名 [常量类型] = 值

也支持多个常量定义:const 常量1, 常量2 = 值1, 值2

常量还可以批量定义:

const (
    a = 1
	b = "a"
	c = true
)

同时,批量定义常量时,不对常量赋值会自动使用上面的常量

package main

import "fmt"


const (
	a = 1
	b = "a"
	c = true
	d
	e
)

func main() {
	fmt.Println(a,b,c,d,e)
}

输出

1 a true true true

虽然常量不能修改,但是在局部环境中可以重复使用定义常量的名字来定义常量/变量

package main

import "fmt"


const (
	a = 1
	b = "a"
	c = true
)

func main() {
	a := false
	c := "inside"
	fmt.Println(a,b,c)
}

输出

false a inside

常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不过,会报错:const initializer test() is not a constant

错误示范:

package main

const (
	d = test()
)

func main() {

}

func test() int {
	return 1
}

编译出错const initializer test() is not a constant

正常示范:

package main

import "fmt"

const (
	d = len("abc")
)

func main() {
	fmt.Println(d)
}

输出

3

特殊常量iota

iota,特殊常量,可以认为是一个可以被编译器修改的常量。

iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

即iota为一个从0开始的整数,在一个批量定义的const()中,每出现一个常量都会iota++

package main

import "fmt"

const (
	a = iota
	b
	c
	d
	e
	f
)

func main() {
	fmt.Println(a,b,c,d,e,f)
}

输出

0 1 2 3 4 5

iota 可以用于枚举或需要逐个增加的数量级定义如:

package main

import (
	"fmt"
)

const (
	SUCCESS = iota
	DANGER
	ERROR
)

const (
	BYTE = 1 << (10 * iota)
	KB
	MB
	GB
)

func main() {
	fmt.Println(SUCCESS,DANGER,ERROR)
	fmt.Println(BYTE,KB,MB,GB)
}

输出

0 1 2
1 1024 1048576 1073741824

同时需要注意的是,并不是每一个常量声明iota++,而是const()内每多一行iota++

package main

import (
	"fmt"
)

const (
	a,b = iota,iota*10
	c,d = iota,iota*10
	e,f = iota,iota*10
)

func main() {
	fmt.Println(a,b,c,d,e,f)
}

输出

0 0 1 10 2 20

即使常量在定义的过程中使用了其他数据,iota也是在自动递增的:

package main

import (
	"fmt"
)

const (
	a = iota
	b
	c = "a"
	d
	e = iota
	f
)

func main() {
	fmt.Println(a,b,c,d,e,f)
}

输出

0 1 a a 4 5

总结

入门思维导图下载(使用xmind打开):golang.xmind

程序幼儿员-龚学鹏
请先登录后发表评论
  • latest comments
  • 总共0条评论