读取配置文件时出错。Golang使用viper包。

huangapple go评论79阅读模式
英文:

Error reading config file. Golang using viper package

问题

请帮我阅读一个env.json文件。每次运行我的代码时,我总是得到以下错误信息:

Error reading config file, Config File "env" Not Found in "[/Users/franklynomonade/go/src/bitbucket.org/core_backend/cmd/server/bitbucket.org/core_backend/pkg/app/config]"

"/Users/franklynomonade/go/src/bitbucket.org/core_backend/cmd/server" 是我的 main.go 文件所在的路径,而 bitbucket.org/core_backend/pkg/app/config 是 env.json 文件所在的路径。
我相信应该读取的 env.json 文件路径是 bitbucket.org/core_backend/pkg/app/config,而不是 "/Users/franklynomonade/go/src/bitbucket.org/core_backend/cmd/server/bitbucket.org/core_backend/pkg/app/config"

我正在使用 github.com/spf13/viper 包来读取 env.json 文件。

以下是读取 env.json 文件的代码:

func LoadConfig() {
	viper.AddConfigPath(myPath)

	viper.SetConfigName("env")

	viper.SetConfigType("json")

    // 在给定的路径中搜索配置文件并读取
	if err := viper.ReadInConfig(); err != nil {
        log.Fatalf("error reading config file: %s", err)
    }

    // 确认使用的配置文件
    log.Printf("Using s: %s\n", viper.ConfigFileUsed())
}

有什么办法可以解决这个问题吗?

英文:

please i need help in reading from an env.json file. Anytime i run my code i always get this error

> Error reading config file, Config File "env" Not Found in
> "[/Users/franklynomonade/go/src/bitbucket.org/core_backend/cmd/server/bitbucket.org/core_backend/pkg/app/config]"

"/Users/franklynomonade/go/src/bitbucket.org/core_backend/cmd/server" is the path where my main.go file is in, while "bitbucket.org/core_backend/pkg/app/config" is the path where the env.json file is located.
I believe the path where the env.json file should be read is "bitbucket.org/core_backend/pkg/app/config" and not "/Users/franklynomonade/go/src/bitbucket.org/core_backend/cmd/server/bitbucket.org/core_backend/pkg/app/config"

I am using github.com/spf13/viper package to read the env.json file.

读取配置文件时出错。Golang使用viper包。

func LoadConfig() {
	viper.AddConfigPath(myPath)

	viper.SetConfigName("env")

	viper.SetConfigType("json")

    // searches for config file in given paths and read it
	if err := viper.ReadInConfig(); err != nil {
        log.Fatalf("error reading config file: %s", err)
    }

    // confirm which config file is used
    log.Printf("Using s: %s\n", viper.ConfigFileUsed()
}

Any idea on how i can fix this?

答案1

得分: 0

你可以使用相对路径或绝对路径,通常最好使用相对路径,因为你不需要指定项目外部的路径。

使用相对路径时,它会相对于你执行二进制文件的文件夹进行搜索。

假设这是你的目录结构:

├── core_backend
│   ├── cmd
│   └── pkg
│       ├── api 
│       └── app
│            └── config
│                  └── env.json

假设你在core_backend目录中运行程序,你可以将变量myPath设置为以下值:

"pkg/app/config"
英文:

You can use relative or absolute paths, usually, it's better to use relative paths since you don't need to specify the path outside of your project.

When using the relative path, it searches the path relative to the folder in which you executed the binary.

Assuming this is the tree:

├── core_backend
│   ├── cmd
│   └── pkg
│       ├── api 
│       └── app
│            └── config
│                  └── env.json

Let's say you run your program in the core_backend directory, you would set your variable myPath to this value

"pkg/app/config"

huangapple
  • 本文由 发表于 2022年4月11日 21:05:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/71828392.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定