dongshao9106 2019-05-27 23:49 采纳率: 100%
浏览 157
已采纳

如何以父子顺序构造yaml文件?

I want to form a struct using golang via yaml file but I find it difficult to figure out to do it.

api:
  local:
    host: localhost
    port: 8085
  develop:
    host:
    port:
  production:
    host:
    port:
rest-api:
  local:
    host: localhost
    port: 8085
  develop:
    host:
    port:
  production:
    host:
    port:

this is the format in my yaml file

the expected code of this is i want to create a dynamic api url in local, develop and production format like api : local = host+port, same to develop and production to dynamically configure it easily and set up

Would appreciate your help in golang struct and also for your help.

  • 写回答

1条回答 默认 最新

  • donglaoe2979 2019-05-28 01:43
    关注

    This online resource will get you halfway there:

    https://mengzhuo.github.io/yaml-to-go/

    Pasting your yaml yields this:

    type AutoGenerated struct {
        API struct {
            Local struct {
                Host string `yaml:"host"`
                Port int    `yaml:"port"`
            } `yaml:"local"`
            Develop struct {
                Host interface{} `yaml:"host"`
                Port interface{} `yaml:"port"`
            } `yaml:"develop"`
            Production struct {
                Host interface{} `yaml:"host"`
                Port interface{} `yaml:"port"`
            } `yaml:"production"`
        } `yaml:"api"`
        RestAPI struct {
            Local struct {
                Host string `yaml:"host"`
                Port int    `yaml:"port"`
            } `yaml:"local"`
            Develop struct {
                Host interface{} `yaml:"host"`
                Port interface{} `yaml:"port"`
            } `yaml:"develop"`
            Production struct {
                Host interface{} `yaml:"host"`
                Port interface{} `yaml:"port"`
            } `yaml:"production"`
        } `yaml:"rest-api"`
    }
    

    There's obvious sub-type duplicates. So it can be trimmed.

    First pass:

    type Address struct {
        Host string `yaml:"host"`
        Port int    `yaml:"port"`
    }
    
    type MyConfig struct {
        API struct {
            Local      Address `yaml:"local"`
            Develop    Address `yaml:"develop"`
            Production Address `yaml:"production"`
        } `yaml:"api"`
        RestAPI struct {
            Local      Address `yaml:"local"`
            Develop    Address `yaml:"develop"`
            Production Address `yaml:"production"`
        } `yaml:"rest-api"`
    }
    

    Second (and final) pass:

    type Address struct {
        Host string `yaml:"host"`
        Port int    `yaml:"port"`
    }
    
    type Deployment struct {
        Local      Address `yaml:"local"`
        Develop    Address `yaml:"develop"`
        Production Address `yaml:"production"`
    }
    
    type MyConfig struct {
        API     Deployment `yaml:"api"`
        RestAPI Deployment `yaml:"rest-api"`
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题