go编程中yaml的inline应用

下列代码,设计 Config 和 MyConfig 是为可扩展 Config,同时 Config 作为公共部分可保持变化。采用了匿名的内嵌结构体,但又不希望 yaml 结果多出一层。如果 MyConfig 中的 Config 没有使用"yaml:",inline""修饰,则读取不到配置,Config 中的 Db 将为 nil。

go 复制代码
package main

import (
    "fmt"
    "os"
    "gopkg.in/yaml.v2"
)

type DbConfig struct {
    Dsn string `yaml:"dsn"`
}

type Config struct {
    Db *DbConfig `yaml:"db"`
}

type MyConfig struct {
    Config `yaml:",inline"`
}

/*
上述 MyConfig 对应的 yaml 文件:

db:
    dsn: "dsn123"
*/

func main() {
    bytes, err := os.ReadFile("./test.yaml")
    if err != nil {
        panic(err)
    }
    
    config := &MyConfig{}
    err = yaml.Unmarshal(bytes, &config)
    if err != nil {
        panic(err)
    }
    
    fmt.Printf("%+v\n", *config)
}
相关推荐
只_只2 分钟前
B1013 PAT乙级JAVA题解 数素数
java·开发语言
minji...2 分钟前
C++ list的模拟实现
开发语言·c++·list
蝎子莱莱爱打怪13 分钟前
🚀🚀🚀嗨,一起来开发 开源IM系统呀!
前端·后端·github
豌豆花下猫22 分钟前
Python 潮流周刊#119:Google 停止开发 Pytype!
后端·python·ai
易元22 分钟前
模式组合应用-外观模式
后端·设计模式
龙卷风040522 分钟前
SpringAI调用第三方模型增加自定义请求参数
java·后端
千册23 分钟前
pyside6 的pdf显示测试 -- 01
开发语言·python·pdf
Aurora_NeAr24 分钟前
对比Java学习Go——函数、集合和OOP
后端
UnnamedOrange25 分钟前
有来前后端部署
前端·后端
Aurora_NeAr26 分钟前
Golang并发编程及其高级特性
后端·go