Go 全局配置的四种方式
· 阅读需 2 分钟
常量 (Constants)
对于不会改变的配置项,常量是最好的选择
package config
// 定义全局常量
const (
ServerPort = 8080
DatabaseURI = "localhost:5432"
Environment = "production"
)
Map
如果需要运行时可以改变的配置项,Map和结构体更好
package config
// 使用map来存储配置
var GlobalConfig = map[string]interface{}{
"timeout": 30,
"logLevel": "info",
"maxConnections": 100,
}
func init() {
// 这里可以根据不同环境或其他逻辑动态调整配置
if Environment == "development" {
GlobalConfig["logLevel"] = "debug"
}
}
Flag
Flag 适用于需要由最终用户在程序启动时配置的参数
package main
import (
"flag"
"fmt"
)
var (
port = flag.Int("port", 8080, "Server port number")
logLevel = flag.String("logLevel", "info", "Logging level")
)
func main() {
flag.Parse() // 解析传入的命令行参数
fmt.Printf("Server will start at port: %d with log level: %s\n", *port, *logLevel)
}
通过命令行传入
$ go run program.go -port=9090
结构体(构造实例)
对于需要良好组织的大型应用配置,结构体提供了最佳的类型安全性和可维护性
package config
type Config struct {
Port int
DatabaseURI string
LogLevel string
}
// NewConfig 创建一个新的Config实例
func NewConfig() *Config {
return &Config{
Port: 8080,
DatabaseURI: "localhost:5432",
LogLevel: "info",
}
}
var GlobalConfig = NewConfig()
func init() {
// 可以根据需要在这里调整配置
if Environment == "development" {
GlobalConfig.LogLevel = "debug"
}
}
以上是使用 Go 解决配置文件的方式,实际使用推荐 viper 和 godotenv