我使用 viper 编写了一个简单的 go 程序来读取配置文件。
package main
import (
"fmt"
"log"
"github.com/spf13/viper"
)
func main() {
viper.SetConfigType("hcl")
// # first used file
viper.AddConfigPath(".")
viper.SetConfigName("example.hcl")
err := viper.ReadInConfig()
if err != nil {
log.Fatal(err)
}
fmt.Println("host.address =", viper.GetString("host.address"))
fmt.Println("host.port =", viper.GetString("host.port"))
viper.Reset()
}
带有 ./example.hcl 的
"host" = {
"address" = "localhost"
"port" = "5799"
}
程序的输出是
host.address =
host.port =
如果我将配置文件的名称切换为 .yaml (并相应地调整代码)并使用
{
"host": {
"address": "localhost",
"port": 5799
}
}
代码有效。有人对我做错了什么有建议吗?还是 viper 不适用于嵌入式 hcl 字段?