博客
关于我
go-options-一个命令行标识、配置文件值解析库
阅读量:581 次
发布时间:2019-03-11

本文共 1565 字,大约阅读时间需要 5 分钟。

go-options 简介

go-options 是一个用于解析命令行标志、配置文件以及默认结构体值,并用于设置配置值的开源类库。这类库能够将来自命令行标志、配置文件或默认值的配置信息解析到目标结构体的相关成员上。

主要功能

该项目主要设计用于将来自以下不同来源的配置值解析到目标结构体成员上。支持的结构体成员标签包括 "flag"、"cfg" 和 "deprecated"。值得注意的是,值的解析符合以下优先级顺序(从高到低):

  • 命令行标志
  • 懒置命令行标志
  • 配置文件
  • 如果有 Getter 接口.support() 返回的值
  • 结构体默认值
  • 示例说明

    以下是一个典型的使用示例:

    package mainimport (    "flag"    "fmt"    "github.com/mreiferson/go-options"    "time")type Options struct {    MaxSize int64 `flag:"max-size" cfg:"max_size"`    Timeout time.Duration `flag:"timeout" cfg:"timeout"`    Description string `flag:"description" cfg:"description"`}func main() {    flagSet := flag.NewFlagSet("example", flag.ExitOnError)    flagSet.Int64("max-size", 1024768, "maximum size")    flagSet.Duration("timeout", 1*time.Hour, "timeout setting")    flagSet.String("description", "", "description info")    // 通常会在此处解析命令行参数    flagSet.Parse([]string{"-timeout=5s"})    opts := &Options{        MaxSize: 1,        Timeout: time.Second,    }    cfg := map[string]interface{}{        "max-size": 888,        "timeout": "2h",        "description": "description-info",        "description1": "无关内容",    }    fmt.Printf("%#v", opts)  // 输出: &main.Options{    //   MaxSize: 1,    //   Timeout: 1000000000,    //   Description: "",    // }    options.Resolve(opts, flagSet, cfg)    fmt.Println()    fmt.Printf("%#v", opts)  // 输出: &main.Options{    //   MaxSize: 1024768,    //   Timeout: 5000000000,    //   Description: "description-info",    // }

    通过以上代码,可以观察到 go-options 根据预定义的优先级顺序,优先使用命令行标志解析相关配置,然后使用配置文件,最终再使用结构体默认值作为备选方案。这类库设计初衷是帮助开发者高效地管理配置信息,同时尽量减少冗余代码。

    转载地址:http://jwmvz.baihongyu.com/

    你可能感兴趣的文章
    Openlayers中将某个feature置于最上层
    查看>>
    Openlayers中点击地图获取坐标并输出
    查看>>
    Openlayers中设置定时绘制和清理直线图层
    查看>>
    Openlayers入门教程 --- 万字长篇
    查看>>
    Openlayers图文版实战,vue项目从0到1做基础配置
    查看>>
    VM16+ubuntu20.04+win10如何固定虚拟机的ip (固定IP)
    查看>>
    OpenLayers学习三:地图旋转及地图跳转到某一点的方式(以类为接口)
    查看>>
    OpenLayers学习二:点标记的添加删除和修改(以类为接口)
    查看>>
    Openlayers实战教程学习大纲及引导
    查看>>
    Openlayers实战:LayerGroup添加删除显示隐藏
    查看>>
    Openlayers实战:loadstart和loadend事件
    查看>>
    Openlayers实战:modifystart、modifyend互动示例
    查看>>
    Openlayers实战:moveend事件,利用calculateExtent获取地图左上和右下的坐标
    查看>>
    Openlayers实战:overlay上播放视频
    查看>>
    Openlayers实战:select简介及select选择feature实战
    查看>>
    Openlayers实战:个性化比例尺
    查看>>
    Openlayers实战:使几何图形适配窗口
    查看>>
    Openlayers实战:判断共享单车是否在电子围栏内
    查看>>
    Openlayers实战:利用turf获取两个多边形的交集、差集、并集
    查看>>
    Openlayers实战:加载Bing地图
    查看>>