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)
}
相关推荐
MrSYJ4 分钟前
Redis 做分布式 Session
后端·spring cloud·微服务
Cache技术分享4 分钟前
318. Java Stream API - 深入理解 Java Stream 的中间 Collector —— mapping、filtering 和 fla
前端·后端
chilavert3186 分钟前
技术演进中的开发沉思-356:重排序(中)
java·开发语言
devmoon9 分钟前
为 Pallet 搭建最小化 Mock Runtime 并编写单元测试环境
开发语言·单元测试·区块链·智能合约·polkadot
Elieal22 分钟前
SpringBoot 数据层开发与企业信息管理系统实战
java·spring boot·后端
Coder_Boy_24 分钟前
Java开发者破局指南:跳出内卷,借AI赋能,搭建系统化知识体系
java·开发语言·人工智能·spring boot·后端·spring
独自破碎E28 分钟前
BISHI23 小红书推荐系统
java·后端·struts
Mr_Xuhhh30 分钟前
介绍一下ref
开发语言·c++·算法
gustt33 分钟前
构建全栈AI应用:集成Ollama开源大模型
前端·后端·ollama
nbsaas-boot34 分钟前
软件开发最核心的理念:接口化与组件化
开发语言