实现思路
- 使用
os.Getenv
获取环境变量。
- 根据操作系统类型,构建不同的配置文件路径。
- 使用
os.Stat
判断配置文件是否存在,若存在则加载。
代码示例
package main
import (
"fmt"
"os"
"path/filepath"
)
func loadConfig() {
env := os.Getenv("CONFIG_ENV")
var configPath string
switch os := runtime.GOOS; os {
case "windows":
configPath = filepath.Join("C:", "config", fmt.Sprintf("%s.ini", env))
case "linux":
configPath = filepath.Join("/etc", "config", fmt.Sprintf("%s.ini", env))
case "darwin":
configPath = filepath.Join("/Users", "config", fmt.Sprintf("%s.ini", env))
default:
fmt.Println("Unsupported operating system")
return
}
_, err := os.Stat(configPath)
if err == nil {
// 这里可以编写加载配置文件的逻辑,例如使用ini库读取ini文件
fmt.Printf("Loading config file: %s\n", configPath)
} else if os.IsNotExist(err) {
fmt.Printf("Config file %s does not exist\n", configPath)
} else {
fmt.Printf("Error checking config file: %v\n", err)
}
}
跨平台使用环境变量注意问题
- 变量命名规范:虽然环境变量名一般为大写,但不同系统可能有细微差别。尽量遵循通用的命名规范,避免使用系统保留字。
- 环境变量作用域:在Windows中,系统环境变量和用户环境变量有不同的作用域。在Linux和macOS中,环境变量也有不同的设置方式和作用域,如全局环境变量和用户环境变量。
- 设置方式:Windows通过系统属性设置环境变量,Linux和macOS通过修改配置文件(如
.bashrc
等)或在终端临时设置。编写部署脚本时需注意不同系统的设置方式。