为了账号安全,请及时绑定邮箱和手机立即绑定

在编译好的 Go 程序中使用配置文件

在编译好的 Go 程序中使用配置文件

Go
临摹微笑 2021-12-13 18:35:53
我有一个使用config.json文件的 Go 应用程序来获取一些信息。执行go run main.go它时,它可以工作,但是当我将应用程序编译为可执行文件时,出现错误open config.json: no such file or directory。我的代码是:func main() {        data, err := ioutil.ReadFile("./config.json")        check(err)        var config config        err = json.Unmarshal(data, &config)        check(err)}我也试过了ioutil.ReadFile("config.json"),还是不行。check(err)并且config结构在main.go,问题不是来自这里。main.go,config.json和可执行文件在同一目录中。config.json一旦程序被编译,我应该怎么做才能使用该文件?
查看完整描述

2 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

您的配置文件可能不在您启动应用程序的工作目录中。但硬编码文件路径并不是最佳实践。


方法#1:命令行参数

使用该flag包将配置文件的路径作为命令行标志传递:


var filename = flag.String("config", "config.json", "Location of the config file.")


func main() {

        flag.Parse()

        data, err := ioutil.ReadFile(*filename)

        check(err)


        var config config

        err = json.Unmarshal(data, &config)

        check(err)

}

启动应用程序./application -config=/path/to/config.json(取决于您的平台)。


方法#2:环境变量

使用该os包从您的系统环境中读取路径。


func main() {

        filename := os.Getenv("PATH_TO_CONFIG")

        if filename == "" {

          filename = "config.json"

        }


        data, err := ioutil.ReadFile(filename)

        check(err)


        var config config

        err = json.Unmarshal(data, &config)

        check(err)

}

设置环境变量export PATH_TO_CONFIG=/path/to/config.json(取决于您的平台)并启动应用程序。


config.json如果没有为应用程序提供路径,两种方法都将尝试在工作目录中查找。


查看完整回答
反对 回复 2021-12-13
?
千万里不及你

TA贡献1784条经验 获得超9个赞

根据您使用go install <your_package>go build <your_package>,您的最终可执行文件最终将位于不同的位置。

如果您正在使用go build <your_package>,您的可执行文件将位于您调用该命令的文件夹中。IOW,如果您go build <your_package>在包含您main.goconfig.json.

如果您使用go install <your_package>,您的可执行文件将位于您的$GOPATH/bin. 在这种情况下,您必须相应地更新ioutil.ReadFile()函数调用的参数。

更好的方法是将您的文件位置config.json作为参数传递给您的可执行文件,而不是对其进行硬编码。


查看完整回答
反对 回复 2021-12-13
  • 2 回答
  • 0 关注
  • 275 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信