使用go-yaml/yaml解析YAML时EncryptKey未提取的问题排查
问题解决:yaml库解析时EncryptKey字段未被提取
我刚帮你排查了这个问题,核心原因就是一个小疏忽——你在结构体字段上用错了标签!
问题根源
gopkg.in/yaml.v2库在解析YAML内容时,只会识别**yaml:"字段名"**格式的结构体标签,而你代码里给Port和EncryptKey加的是json:"xxx"标签,这是给encoding/json库用的,yaml库根本不会读取它,所以EncryptKey字段自然没被正确映射。
修正后的代码
把结构体的标签替换成yaml格式即可:
package main import ( "fmt" "log" "gopkg.in/yaml.v2" ) var data = ` port: 8080 encryptKey: "jfgjfgkfgd" ` type Config struct { Port int `yaml:"port"` EncryptKey string `yaml:"encryptKey"` } func main() { t := Config{} err := yaml.Unmarshal([]byte(data), &t) if err != nil { log.Fatalf("error: %v", err) } fmt.Printf("--- t:\n%v\n\n", t) }
运行结果
修正后再运行,就能看到EncryptKey字段被正确提取了:
--- t: {8080 jfgjfgkfgd}
简单来说,不同的序列化/反序列化库依赖各自的标签来匹配字段,yaml库用yaml标签,json库用json标签,可不能搞混哦~
内容的提问来源于stack exchange,提问作者pigLoveRabbit520
相关产品推荐
相关产品推荐

