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)
}
相关推荐
flysh05几秒前
C# 中类型转换与模式匹配核心概念
开发语言·c#
AC赳赳老秦1 分钟前
Python 爬虫进阶:DeepSeek 优化反爬策略与动态数据解析逻辑
开发语言·hadoop·spring boot·爬虫·python·postgresql·deepseek
Victor3561 分钟前
Hibernate(29)什么是Hibernate的连接池?
后端
Victor3561 分钟前
Hibernate(30)Hibernate的Named Query是什么?
后端
浩瀚之水_csdn2 分钟前
Python 三元运算符详解
开发语言·python
源代码•宸27 分钟前
GoLang八股(Go语言基础)
开发语言·后端·golang·map·defer·recover·panic
czlczl2002092528 分钟前
OAuth 2.0 解析:后端开发者视角的原理与流程讲解
java·spring boot·后端
颜淡慕潇36 分钟前
Spring Boot 3.3.x、3.4.x、3.5.x 深度对比与演进分析
java·后端·架构
布列瑟农的星空36 分钟前
WebAssembly入门(一)——Emscripten
前端·后端
rit843249936 分钟前
基于MATLAB的SUSAN特征检测算子边缘提取实现
开发语言·matlab