当前位置: 首页 > 面试题库 >

使用Golang Viper读取地图片段

何灿
2023-03-14
问题内容

我正在从这里使用出色的毒蛇库:https :
//github.com/spf13/viper

我正在尝试读取hcl中的配置文件(尽管它也可能是JSOn或YAML文件),如下所示:

interval = 10
statsd_prefix = "pinger"



group "dns" {
  target_prefix = "ping"
  target "dns" {
    hosts = [
      "dnsserver1",
      "dnsserver2"
    ]
  }
}

到目前为止,我的代码如下:

viper.SetConfigName("config")
viper.AddConfigPath(".")

err := viper.ReadInConfig()

if err != nil {
  panic(fmt.Errorf("Fatal error config file: %s \n", err))
}

interval := viper.GetInt("interval")
prefix := viper.GetString("statsd_prefix")

groups := viper.GetStringMap("group")

fmt.Println(interval)
fmt.Println(prefix)

我遇到的最大问题是使用group选项。这可以是多个不同的组。

当我在使用中阅读它时viper.GetStringMap,它似乎不起作用,所以我使用了标准viper.Get函数。转储时,结果结构如下所示:

([]map[string]interface {}) (len=1 cap=1) {
 (map[string]interface {}) (len=1) {
  (string) (len=3) "dns": ([]map[string]interface {}) (len=1 cap=2) {
   (map[string]interface {}) (len=2) {
    (string) (len=13) "target_prefix": (string) (len=4) "ping",
    (string) (len=6) "target": ([]map[string]interface {}) (len=1 cap=1) {
     (map[string]interface {}) (len=1) {
      (string) (len=8) "dns": ([]map[string]interface {}) (len=1 cap=1) {
       (map[string]interface {}) (len=1) {
        (string) (len=5) "hosts": ([]interface {}) (len=2 cap=2) {
         (string) (len=18) "dnsserver1",
         (string) (len=18) "dnsserver2"
        }
       }
      }
     }
    }
   }
  }
 }
}

我使用反射时似乎是切片类型。我需要将其切成薄片吗?我怎么做?有没有更简单的方法来管理这样的数据结构?

我是golang的新手,所以请放轻松:)


问题答案:

建议不要先描述您想要的配置结构,而不是调用原始Get,然后再确定要得到什么,就像

type config struct {
    interval int `mapstructure:"Interval"`
    statsdPrefix string `mapstructure:"statsd_prefix"`
    groups []group
}
type group struct {
    group string `mapstructure:"group"`
    targetPrefix string `mapstructure:"target_prefix"`
    targets []target
}
type target struct {
    target string `mapstructure:"target"`
    hosts []string `mapstructure:"hosts"`
}

而不是在其中解组(解码)

var C config

err := viper.Unmarshal(&C)
if err != nil {
    t.Fatalf("unable to decode into struct, %v", err)
}

假设解码器足够聪明,可以在可能的情况下取消所提供的结构。



 类似资料:
  • 在UserProfileModule中再添加一个读取用户头像的方法 @Ok("raw:jpg") @At("/avatar") @GET public Object readAvatar(@Attr(scope=Scope.SESSION, value="me")int userId, HttpServletRequest req) throws SQLExcept

  • 我正在使用Bing Maps v8 API,试图将我自己的GeoJSON加载到Bing Maps上,如本例所示:https://www.Bing.com/API/Maps/sdkrelease/mapcontrol/isdk#GeoJSONReadObject+js 我正在成功地创建我的JSON(我已经使用Bing Maps拖放特性测试了它,并且我的所有点都显示在Map.https://bingm

  • 本文向大家介绍Android 中使用 AsyncTask 异步读取网络图片,包括了Android 中使用 AsyncTask 异步读取网络图片的使用技巧和注意事项,需要的朋友参考一下  1.新建Android工程AsyncLoadPicture 新建布局文件activity_main.xml主界面为一个GridView,还有其子项布局文件gridview_item.xml 2.功能主界面MainA

  • 问题内容: 我正在尝试使用地图和这些地图的切片来存储从数据库查询返回的行。但是我在row.Next()以及最终的每次迭代中得到的都是查询中同一行的切片。似乎问题与我存储的存储位置相同有关,但直到现在我仍无法解决。 我在这里想念的是什么: 源代码如下: 问题答案: 这是因为您存储在切片中的是指向地图的指针,而不是地图的副本。 从实际运行的Go地图中: 地图类型是引用类型,例如指针或切片… 由于您是在

  • X2.2.0新增 sp_get_image_url($file,$style='') 功能: 转化数据库保存图片的文件路径,为可以访问的url 参数: $file: 数据库中保存的文件名 $style:样式(七牛) 返回: 类型string,图片可以访问的url 使用: $url = sp_get_image_url('portal/23232.png');

  • X2.2.0新增 sp_get_image_preview_url($file,$style='watermark') 功能: 获取图片预览链接 参数: $file: 数据库中保存的文件名 $style:样式(七牛) 返回: 类型string,图片预览链接 使用: $url = sp_get_image_preview_url('portal/23232.png');