跳到主要内容

Go 全局配置的四种方式

· 阅读需 2 分钟
素明诚
Full stack development

常量 (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