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)
}
相关推荐
用户298698530142 分钟前
如何使用 Spire.Doc 在 Word 中查找和替换文本?
后端
宫水三叶的刷题日记12 分钟前
真的会玩,钉钉前脚辟谣高管凌晨巡查工位,小编随后深夜发文
前端·后端·面试
天天摸鱼的java工程师12 分钟前
Go 语言未来会取代 Java 吗?
java·后端
witkey_ak989613 分钟前
python 可迭代对象相关知识点
开发语言·python
野犬寒鸦31 分钟前
力扣hot100:最大子数组和的两种高效方法:前缀和与Kadane算法(53)
java·后端·算法
AAA修煤气灶刘哥35 分钟前
《从 0 到 1 上手:RBAC+SpringSecurity 权限管理教程》
java·后端·安全
呼啦啦啦啦啦啦啦啦38 分钟前
synchronized锁,ReentrantLock 锁
开发语言·
倚栏听风雨1 小时前
CompletableFuture 延时执行任务
后端
舒一笑1 小时前
MySQL中模糊匹配like的一个坑
后端·mysql
BingoGo1 小时前
PHP 集成 FFmpeg 处理音视频处理完整指南
后端·php