Site icon 时鹏亮的Blog

go语言 yaml到config的配置结构体声明 魔法

请知悉:本文最近一次更新为 2年 前,文中内容可能已经过时。

说魔法其实也可以说是个邪道做法,毕竟我主要玩儿PHP,Go接触较少,结构体啊分片数组啥的数据结构领悟还不够深入,所以碰到复杂的yaml配置文件需要先声明好结构体才能正确初始化好配置的时候,会感觉有些困难。

实践中因为不熟悉,常想是否有更简单的办法呢?后来脑子抽风,想到一个邪道做法。

原始yaml:

apiVersion: v1
kind: Secret
metadata:
name: mysecret
branch:
- key: aaa
name: 测试
- key: bbb
name: 测试
test:
key1: bbb
key2: bbb

然后去Online YAML Parser转为json核对数据结构是否正确:

输出的json为:

{
"test": {
"key2": "bbb",
"key1": "bbb"
},
"kind": "Secret",
"apiVersion": "v1",
"branch": [
{
"name": "\u6d4b\u8bd5",
"key": "aaa"
},
{
"name": "\u6d4b\u8bd5",
"key": "bbb"
}
],
"metadata": {
"name": "mysecret"
}
}

接下来,使用Golang: Convert JSON in to a useful struct.把json转为结构体:


type MyJsonName struct {
APIVersion string `json:"apiVersion"`
Branch []struct {
Key string `json:"key"`
Name string `json:"name"`
} `json:"branch"`
Kind string `json:"kind"`
Metadata struct {
Name string `json:"name"`
} `json:"metadata"`
Test struct {
Key1 string `json:"key1"`
Key2 string `json:"key2"`
} `json:"test"`
}

呐,把json替换为yaml就是config可以初始化声明时使用的结构体了。

菜鸡自有菜鸡的邪道魔法,如此依赖,复杂的结构体声明起来也事半功倍。

当然,如果你有更好的方法,望不吝赐教。


如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。

尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。


与《go语言 yaml到config的配置结构体声明 魔法》相关的博文:

Exit mobile version