【发布时间】:2021-10-24 15:20:54
【问题描述】:
上下文
我创建了一个简单的程序来自动更新我在 OpenDNS 上的公共 IP 地址。 为了能够使用该程序,我需要 OpenDNS 站点的凭据,因此我创建了一个 config.json 文件以便能够从中读取凭据。
在 Go 项目文件夹中,调用二进制文件,工作正常
./main
http return code: 200 defining the new IP: 123.123.123.123
如果我切换到另一个文件夹(例如我的 /home/user),二进制文件将无法再打开该文件
./Documents/ip-updater-opendns/main
panic: couldn't open config file config.json: open config.json: no such file or directory
goroutine 1 [running]:
main.loadConfigFile()
/home/user/Documents/ip-updater-opendns/main.go:50 +0x1e6
main.main()
/home/user/Documents/ip-updater-opendns/main.go:25 +0x45
我打开文件的方式如下:
func loadConfigFile() Config {
const ConfigFileEnv = "config.json"
var config Config
file, err := os.Open(ConfigFileEnv)
if err != nil {
panic(fmt.Errorf("couldn't open config file %s: %w", ConfigFileEnv, err))
}
err = json.NewDecoder(file).Decode(&config)
if err != nil {
panic(fmt.Errorf("couldn't decode config file %s as Json: %w", ConfigFileEnv, err))
}
return config
}
为什么要从另一个文件夹调用我的二进制文件?
因为我希望 cronjob 每 5 分钟执行一次这个程序。
所以我的问题是,如何解决这个问题?
【问题讨论】:
-
你必须告诉你的程序在哪里去找到配置文件。目前它只在您运行二进制文件的文件夹中查找。您可以使用默认位置(即 ~/.config/ipupdater.config),也可以通过读取指向配置文件位置的环境变量或将文件位置作为命令传递来允许在外部配置您的程序行参数。
-
100% 重复。