golang中的文件路径

时间:2016-04-05 08:22:55

标签: go

我有一个下一个结构的项目:

|_main.go
|_config
  |_config.go
  |_config_test.go
  |_config.json

我在config.go中有下一个代码行:

file, _ := os.Open("config/config.json")

当我执行包含来自main.go的代码行的方法时,一切正常。但是,当我尝试从config_test.go执行此方法时,会产生错误:

open config/config.json: no such file or directory

据我所知,这是一个工作目录问题,因为我使用来自不同目录的相对路径启动相同的代码。如何在不使用config.go完整路径的情况下解决此问题?

1 个答案:

答案 0 :(得分:4)

始终根据当前目录解析相对路径。因此,避免相对路径会更好。

使用命令行flags或配置管理工具(更好的方法),例如Viper

同样根据The Twelve-Factor App,您的配置文件应该在项目之外。

例如使用Viper:

import "github.com/spf13/viper"

func init() {

    viper.SetConfigName("config")

    // Config files are stored here; multiple locations can be added
    viper.AddConfigPath("$HOME/configs")
    errViper := viper.ReadInConfig()

    if errViper != nil {
        panic(errViper)
    }
    // Get values from config.json
    val := viper.GetString("some_key")

    // Use the value
}