我编写了一个简单的go程序,使用viper在一个配置文件中读取。
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
}
}
密码有效。有人对我做错了什么有建议吗?还是毒蛇不适用于嵌入的hcl字段?
发布于 2021-12-22 21:06:32
Viper & HCL没有很好的集成和发挥,就像你的例子一样
您可以使用树袋熊作为解决上述问题的替代方法。
看这个例子。
package main
import (
"fmt"
"github.com/knadh/koanf"
"github.com/knadh/koanf/parsers/hcl"
"github.com/knadh/koanf/providers/file"
)
var Conf = koanf.New(".")
func main() {
Conf.Load(file.Provider("/etc/app/config.hcl"),hcl.Parser(true))
fmt.Println("host.address =", Conf.Get("host.address"))
fmt.Println("host.port =", Conf.Get("host.port"))
}
https://stackoverflow.com/questions/63696952
复制