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)
}
相关推荐
念恒123064 小时前
Python 面向对象编程核心:对象、实例化、封装与变量作用域
开发语言·python
雪隐4 小时前
个人电脑玩AI00-前言
人工智能·后端
大菜菜小个子4 小时前
template<typename T>使用
java·开发语言·算法
L_09075 小时前
【C++】C++11 新特性
开发语言·c++
方也_arkling5 小时前
【Java-Day15】API篇-ArrayList集合
java·开发语言
我是一颗柠檬5 小时前
【Java后端技术亮点】动态路由权限(按钮级权限),细粒度控制到按钮级别
java·开发语言·后端·状态模式
Fanfanaas5 小时前
C++ 继承
java·开发语言·jvm·c++·学习·算法
前端Hardy5 小时前
CSS 动画真的比 JS 快?Josh Comeau 做了组实验,结果跟直觉不一样
前端·javascript·后端
Front思5 小时前
调取支付宝支付正式环境不可以唤起来,但是沙箱可以
后端
foggyprojects5 小时前
AI 生成 SQL 模板以后,为什么还需要固定 helper 规则
后端