Golang使用yaml第三方包无法正确解析配置参数
Posted 5055555
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang使用yaml第三方包无法正确解析配置参数相关的知识,希望对你有一定的参考价值。
首先我的yaml文件是这样的:
setting:
corpid: 1
corpsecret: 2
然后附上解析代码:
package main
import (
"fmt"
"gopkg.in/yaml.v2"
"io/ioutil"
"log"
)
type Config struct {
Corpid string `yaml:"corpid"`
Corpsecret string `yaml:"corpsecret"`
}
func main() {
r, err := ioutil.ReadFile("conf/conf.yaml")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(r))
config:=Config{}
err = yaml.Unmarshal(r, &config)
if err != nil {
log.Fatal(err)
}
fmt.Println("yaml文件解析: ", config)
}
咋一看没有没有啥问题,struct结构也是大写开头的,看github上官方Example 我开始以为OK了,结果程序的确没有报错,但是结果很出乎我的意料
返回的是空的结构!
通过翻看源码看到了这么一段话,
所以想到了下面这种方法来解决问题,把Config结构改成set结构:
package main
import (
"fmt"
"gopkg.in/yaml.v2"
"io/ioutil"
"log"
)
type set struct {
Set map[string]interface{} `yaml:"setting""`
}
func main() {
r, err := ioutil.ReadFile("conf/conf.yaml")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(r))
// config:=Config{}
s := set{}
err = yaml.Unmarshal(r, &s)
if err != nil {
log.Fatal(err)
}
fmt.Println("解析内容: ", s)
}
这次问题就解决了,可以得到yaml解析出的配置内容了。
接下里我们可以加一个循环,把里面的数值拿出来
package main
import (
"fmt"
"gopkg.in/yaml.v2"
"io/ioutil"
"log"
)
type set struct {
Set map[string]interface{} `yaml:"setting""`
}
func main() {
r, err := ioutil.ReadFile("conf/conf.yaml")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(r))
// config:=Config{}
s := set{}
err = yaml.Unmarshal(r, &s)
if err != nil {
log.Fatal(err)
}
fmt.Println("解析内容: ", s)
for key, value := range s.Set {
fmt.Print(key," ")
fmt.Println(value)
}
}
结果:
以上是关于Golang使用yaml第三方包无法正确解析配置参数的主要内容,如果未能解决你的问题,请参考以下文章