在 Go 语言中,常量用于表示在程序运行期间不会改变的值。常量的值在编译时就已确定,并且它们的值在程序运行过程中不可修改。常量通常用于表示不随程序状态变化的值,比如数学常数、物理常数、配置参数等。
📖 目录
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. 常量的类型
常量有与其值相关的类型,通常可以是基本类型(如 int
、float64
、bool
、string
等)。常量的类型在声明时决定了它所能表示的值的范围和精度。
2.1 数字常量
数字常量可以是整数常量或浮点常量。整数常量的类型可以是 int
、int32
、int64
等,而浮点常量的类型可以是 float32
或 float64
。
示例:
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 布尔常量
布尔常量只有两个值:true
和 false
,通常用于控制逻辑。
示例:
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 语言中不仅限于常规的数值类型,还包括字符串、布尔值等,是开发高质量代码的基础工具之一。
发表回复