0

我的服务器有以下yaml openapi 3配置:

servers:
  - url: "localhost"
    description: "localhost development server"
    variables:
        port:
            default: ":10000"

如果没有那个讨厌的破折号,通过这些值获得这些值viper是微不足道的,但我正在努力解决它(这是使yaml openapi 3合规所必需的。

这样做:

servers := viper.Get("servers")
fmt.Println(reflect.TypeOf(servers))
fmt.Println(servers)

告诉我这个:

[]interface {}
[map[description:localhost development server url:localhost variables:map[port:map[default::10000]]]]

但是我的 n00biegolang能力缺乏 ninja Skillz 来检索该:10000port

非常感谢任何帮助!

4

1 回答 1

0

servers是一个数组。假设 Viper 无法处理数组,您首先必须索引servers以获取其中的对象:

server:=servers[0]

一旦你有了服务器,假设它是一个map[string]interface{},你可以下降:

if v, ok:=server["variables"]; ok {
   if varMap, ok:=v.(map[string]interface{}); ok {
      if p, ok:=varMap["port"]; ok {
        if port, ok:=p.(map[string]interface{}); ok {
           if d, ok:=port["default"]; ok {
               defaultValue=fmt.Sprint(d)
           } 
        }
      }
   }
}
于 2020-06-25T14:35:22.313 回答