Golang const 关键字
最后修改于 2025 年 5 月 7 日
本教程将讲解如何在 Go 中使用 const 关键字。我们将通过实际示例介绍常量基础知识,包括声明和使用常量。
const 关键字用于声明在程序执行期间不能被修改的不可变值。常量提供编译时固定的值。
在 Go 中,const 可以声明数值、字符串、布尔值和其他基本类型。常量必须在声明时进行初始化,这有助于提高代码的可读性和可维护性。
基本常量声明
const 最简单的用法是声明单个不可变值。此示例展示了基本常量语法。
package main
import "fmt"
func main() {
const pi = 3.14159
const appName = "MyGoApp"
fmt.Println("Pi value:", pi)
fmt.Println("Application:", appName)
// pi = 3.14 // This would cause compile error
}
pi 和 appName 是不能被修改的常量。尝试更改它们会导致编译错误。
类型常量
常量可以拥有显式类型,以增强类型安全。此示例展示了类型常量声明。
package main
import "fmt"
func main() {
const maxUsers int = 100
const defaultTimeout float64 = 30.5
const welcomeMessage string = "Hello, Gopher!"
fmt.Printf("Max users: %d (%T)\n", maxUsers, maxUsers)
fmt.Printf("Timeout: %f (%T)\n", defaultTimeout, defaultTimeout)
fmt.Printf("Message: %s (%T)\n", welcomeMessage, welcomeMessage)
}
每个常量都声明了显式类型。fmt.Printf 中的 %T 格式说明符会显示每个常量的数据类型。
多常量声明
Go 允许在一个块中声明多个常量。此示例展示了分组常量语法。
package main
import "fmt"
func main() {
const (
daysInWeek = 7
hoursInDay = 24
minutesInHour = 60
)
fmt.Printf("Week has %d days\n", daysInWeek)
fmt.Printf("Day has %d hours\n", hoursInDay)
fmt.Printf("Hour has %d minutes\n", minutesInHour)
}
常量被包含在括号内。这种语法对于相关的常量来说更简洁,并提供了更好的代码组织。
常量表达式
常量可以用在编译时求值的表达式来初始化。此示例演示了常量表达式。
package main
import "fmt"
func main() {
const (
secondsInMinute = 60
secondsInHour = secondsInMinute * 60
secondsInDay = secondsInHour * 24
)
fmt.Printf("Minute: %d seconds\n", secondsInMinute)
fmt.Printf("Hour: %d seconds\n", secondsInHour)
fmt.Printf("Day: %d seconds\n", secondsInDay)
}
常量使用了算术表达式。这些表达式在编译时进行求值,而不是在运行时,因此效率很高。
Iota 用于枚举常量
Go 的 iota 标识符用于创建枚举常量。此示例展示了如何有效地使用 iota。
package main
import "fmt"
func main() {
const (
Monday = iota + 1
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
)
fmt.Println("Days:", Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday, Sunday)
const (
Read = 1 << iota
Write
Execute
)
fmt.Printf("Permissions: Read=%b, Write=%b, Execute=%b\n",
Read, Write, Execute)
}
iota 从 0 开始,每个常量递增 1。第二组示例使用位移运算演示了位掩码模式的创建。
字符串常量
字符串常量在 Go 程序中很常见。此示例展示了它们的声明和用法。
package main
import "fmt"
const (
greeting = "Hello, World!"
farewell = "Goodbye for now!"
errorMessage = "An error occurred"
)
func main() {
fmt.Println(greeting)
fmt.Println(farewell)
fmt.Println(errorMessage)
const multiline = `This is a
multiline string
constant in Go`
fmt.Println(multiline)
}
字符串常量可以是单行或多行(使用反引号)。它们常用于消息、模板和配置值。
实际示例:配置常量
这个实际示例展示了常量如何组织配置值。常量有助于在整个应用程序中保持一致性。
package main
import "fmt"
const (
AppName = "InventoryManager"
AppVersion = "1.2.3"
MaxConnections = 100
TimeoutSeconds = 30
AdminEmail = "admin@example.com"
SupportURL = "https://support.example.com"
)
func main() {
fmt.Printf("%s v%s\n", AppName, AppVersion)
fmt.Println("Settings:")
fmt.Printf("Max connections: %d\n", MaxConnections)
fmt.Printf("Timeout: %d seconds\n", TimeoutSeconds)
fmt.Printf("Contact: %s\n", AdminEmail)
fmt.Printf("Support: %s\n", SupportURL)
}
应用程序配置集中在常量中。这使得维护更加容易,并防止代码中出现“魔法值”。
来源
本教程通过各种场景下声明和使用常量的实际示例,讲解了 Go 中的 const 关键字。