您的位置:

Golang常量详解

一、常量的定义与赋值

Golang中使用const关键字来定义常量,常量声明语法格式为

const (  
    identifier [type] = value  
    identifier [type] = value  
    ...)  

其中type是可选的,当常量翻译成其他类型时才需要显示声明类型

例如:

const s string = "hello world"
const n = 100
const pi float32 = 3.14

也可以使用const()来定义常量组

例如:

const (
    s string = "hello world"
    n = 100
    pi float32 = 3.14
)

常量还可以用作枚举,例如定义每个星期的天数

const (
    Sunday    = 0
    Monday    = 1
    Tuesday   = 2
    Wednesday = 3
    Thursday  = 4
    Friday    = 5
    Saturday  = 6
)

二、常量表达式

常量表达式是在编译时求值的表达式,可以用于任何需要常量的地方,如数组长度、切片容量等

例如:

const a = 10
const b = 20
const c = a + b //常量表达式,c的值为30

const d = len("hello world") //常量表达式,d的值为11

需要注意的是,常量表达式不允许使用变量和函数调用等

例如:

const a = 10
var b = 20
const c = a + b //错误,常量表达式不能使用变量

三、常量的枚举值

Golang中的枚举值是常量,常量组也可以表示枚举值。例如定义一个星期几的枚举值:

type Weekday int

const (
    Sunday Weekday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)

在上面的代码中,通过使用iota关键字来自动生成枚举值,第一个枚举值默认为0,后面的枚举值默认加1。也可以显式的指定枚举值

type Weekday int

const (
    Sunday Weekday = 0
    Monday Weekday = 1
    Tuesday Weekday = 2
    Wednesday Weekday = 3
    Thursday Weekday = 4
    Friday Weekday = 5
    Saturday Weekday = 6
)

四、常量与类型转换

常量的类型可以通过显式的类型转换来进行修改,例如将整型的常量转换为浮点型

const a = 100
const b = float64(a) //将a转换为float64

需要注意,常量的类型转换只有在编译时才有效,因此需要保证常量转换后的类型能够进行合法的操作

五、常量不可修改

常量一旦赋值不可修改,进行修改会引发编译错误,例如:

const a = 10
a = 20 //错误

这与变量有很大区别,变量是可以修改的

六、常量的作用域

常量的作用域与变量相同,作用域只在当前块内有效

例如:

const a = 10 //全局常量

func test() {
    const a = 20 //局部常量
    fmt.Println(a) //输出20
}

func main() {
    fmt.Println(a) //输出10
    test()
}