在 Go 语言中,常量用于表示在程序运行期间不会改变的值。常量的值在编译时就已确定,并且它们的值在程序运行过程中不可修改。常量通常用于表示不随程序状态变化的值,比如数学常数、物理常数、配置参数等。


📖 目录

  1. 常量声明
  2. 常量的类型
  3. 常量的作用域
  4. 常量组
  5. 常量的类型转换
  6. 常量与变量的区别
  7. 参考资料

1. 常量声明

Go 中的常量通过 const 关键字进行声明。常量声明时必须指定一个值,并且在整个程序生命周期中该值不能被修改。

1.1 基本常量声明

常量可以单独声明,也可以在常量组中声明。每个常量的类型在声明时可以明确指定,也可以由 Go 自动推导。

示例:

package main

import "fmt"

const Pi = 3.14159 // 自动推导为 float64 类型
const Greeting = "Hello, Go!"

func main() {
    fmt.Println(Pi)       // 输出: 3.14159
    fmt.Println(Greeting) // 输出: Hello, Go!
}

1.2 指定常量类型

你可以明确指定常量的类型。在常量声明时,Go 会根据类型推导规则自动选择最适合的类型,但如果你想显式指定类型,可以这么做:

示例:

package main

import "fmt"

const Pi float64 = 3.14159 // 显式指定类型为 float64

func main() {
    fmt.Println(Pi) // 输出: 3.14159
}


2. 常量的类型

常量有与其值相关的类型,通常可以是基本类型(如 intfloat64boolstring 等)。常量的类型在声明时决定了它所能表示的值的范围和精度。

2.1 数字常量

数字常量可以是整数常量或浮点常量。整数常量的类型可以是 intint32int64 等,而浮点常量的类型可以是 float32float64

示例:

package main

import "fmt"

const (
    MaxInt  = 2147483647    // int 类型
    PiValue = 3.14159       // float64 类型
)

func main() {
    fmt.Println(MaxInt)   // 输出: 2147483647
    fmt.Println(PiValue)  // 输出: 3.14159
}

2.2 字符串常量

字符串常量表示文本信息,它是一个不可变的字符序列。Go 中的字符串是 UTF-8 编码。

示例:

package main

import "fmt"

const Greeting = "Hello, Go!"

func main() {
    fmt.Println(Greeting) // 输出: Hello, Go!
}

2.3 布尔常量

布尔常量只有两个值:truefalse,通常用于控制逻辑。

示例:

package main

import "fmt"

const IsEnabled = true

func main() {
    fmt.Println(IsEnabled) // 输出: true
}


3. 常量的作用域

常量的作用域通常与变量类似,可以是局部作用域或全局作用域。常量的作用域取决于它声明的位置。

3.1 局部常量

局部常量只能在声明它的函数内部使用。

示例:

package main

import "fmt"

func main() {
    const LocalConst = 100 // 局部常量
    fmt.Println(LocalConst) // 输出: 100
}

3.2 全局常量

全局常量可以在包的任何地方使用。

示例:

package main

import "fmt"

const GlobalConst = 200 // 全局常量

func main() {
    fmt.Println(GlobalConst) // 输出: 200
}


4. 常量组

Go 支持常量组的声明。常量组是将多个常量集中在一起声明,在一组常量声明中,可以共享类型声明。

4.1 使用常量组声明

常量组的声明允许你在一行中声明多个常量,而不需要重复写 const 关键字。

示例:

package main

import "fmt"

const (
    A = 1
    B = 2
    C = 3
)

func main() {
    fmt.Println(A) // 输出: 1
    fmt.Println(B) // 输出: 2
    fmt.Println(C) // 输出: 3
}


5. 常量的类型转换

Go 不允许常量和变量之间直接进行类型转换。常量只能在声明时定义类型,并且该类型在整个程序中保持不变。

5.1 常量类型转换的限制

常量的类型在声明时已经固定,不能在后续代码中修改。例如,不能将一个 int 常量转换为 float64,必须显式使用类型声明来转换。

示例:

package main

import "fmt"

const Pi int = 3

func main() {
    // 错误示范:Go 不允许直接转换常量类型
    // var pi float64 = Pi // 编译错误:类型不匹配
    var pi float64 = float64(Pi) // 显式类型转换
    fmt.Println(pi) // 输出: 3.0
}


6. 常量与变量的区别

  • 常量:常量在声明后其值不可改变,常量的值在编译时决定。
  • 变量:变量的值可以在运行时改变,变量的值由程序的逻辑决定。

示例:

package main

import "fmt"

const Pi = 3.14  // 常量
var radius = 5.0 // 变量

func main() {
    fmt.Println(Pi)    // 输出: 3.14
    fmt.Println(radius) // 输出: 5
}


7. 参考资料


通过合理使用常量,您可以使代码更加清晰、易于维护,并且避免了程序中意外的值修改。常量在 Go 语言中不仅限于常规的数值类型,还包括字符串、布尔值等,是开发高质量代码的基础工具之一。