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

如何以父子顺序构造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.

图片转代码服务由CSDN问答提供 功能建议

我想通过yaml文件使用golang形成一个结构,但我发现很难弄清楚。< / p>

  api:
本地:
主机:localhost 
端口:8085 
开发:
主机:
端口:
生产:
主机:\  n端口:
rest-api:
本地:
主机:localhost 
端口:8085 
开发:
主机:
端口:
生产:
主机:
端口:
   
 
 

这是我的Yaml文件中的格式

这是我希望在本地创建动态api网址的代码, 和生产格式(如api:local = host + port)一样,可以进行开发和生产以轻松地对其进行动态配置和设置

,感谢您在golang结构中的帮助,并为您提供帮助。< / p>

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

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"`
    }
    
    已采纳该答案
    打赏 评论

相关推荐 更多相似问题