Golang viper 无法读取配置

问题描述 投票:0回答:2

我一直在尝试通过 viper 读取配置,但它总是出现恐慌 nil 指针引用(我已经设置了配置路径和配置名称)。

然后我尝试在它上面创建一个执行点,它告诉我:

不可读:由于只有部分内容,无法读取 0x8 处的字符串 ReadProcessMemory 或 WriteProcessMemory 请求已完成。

执行点错误信息

这里是配置目录:配置目录

这就是我设置路径的方式:在此处输入图像描述

我快要疯了!!!困扰我2天了 (请原谅我缺乏 golang 的经验......我是一个新学习者,非常非常感谢您的帮助!)

go viper
2个回答
0
投票

我尝试了以下结构:

|main.go
|Config
|   config.go
|   config.yaml

文件 config.go 中包含以下行:

viper.AddConfigPath(".")
viper.SetConfigName("config") // Register config file name (no extension)
viper.SetConfigType("yaml")  // Look for specific type
viper.ReadInConfig()
version := viper.Get("server.version")
fmt.Println(version)

我的配置文件包含:

server:
  version: 1.0.0

在这种情况下,我的版本为零。 但是,如果我设置了

v.AddConfigPath("./Config")

viper.AddConfigPath("./Config")
viper.SetConfigName("config") // Register config file name (no extension)
viper.SetConfigType("yaml")  // Look for specific type
viper.ReadInConfig()
version := viper.Get("server.version")
fmt.Println(version)

那么我的版本是1.0.0

你的道路取决于你的

main.go
在哪里,而不是你的
config.go
在哪里。

如果仍然存在问题,也可能是由于文件权限不当造成的。您仍然可以尝试执行

chmod 777 [your configuration file]
来检查您的代码是否不需要更多权限来读取文件。


0
投票

看起来我们也有同样的问题,对于我的某些项目,有时有效,有时无效,对于我的某些项目,我调用根应用程序中的函数

配置/config.go

func InitConfig() {
    viper.SetConfigName("config")
    viper.SetConfigType("yaml")
    viper.AddConfigPath(".")
    err := viper.ReadInConfig()
    if err != nil {
        panic(fmt.Errorf("fatal error config file: %w", err))
    }
    replacer := strings.NewReplacer(".", "_")
    viper.SetEnvKeyReplacer(replacer)
    viper.AutomaticEnv()
}

cmd/root.go(或者在你的 main.go 中调用它)

   func initConfig(){
        config.InitConfig()
    }

    func Execute(){
        initConfig()
        if err := rootCmd.Execute(); err != nil {
            log.Fatal(err)
        }
  }
© www.soinside.com 2019 - 2024. All rights reserved.