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

我有一个使用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一旦程序被编译,我应该怎么做才能使用该文件?


临摹微笑
浏览 276回答 2
2回答

当年话下

您的配置文件可能不在您启动应用程序的工作目录中。但硬编码文件路径并不是最佳实践。方法#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如果没有为应用程序提供路径,两种方法都将尝试在工作目录中查找。

千万里不及你

根据您使用go install <your_package>或go build <your_package>,您的最终可执行文件最终将位于不同的位置。如果您正在使用go build <your_package>,您的可执行文件将位于您调用该命令的文件夹中。IOW,如果您go build <your_package>在包含您main.go和config.json.如果您使用go install <your_package>,您的可执行文件将位于您的$GOPATH/bin.&nbsp;在这种情况下,您必须相应地更新ioutil.ReadFile()函数调用的参数。更好的方法是将您的文件位置config.json作为参数传递给您的可执行文件,而不是对其进行硬编码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go