博客
关于我
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中点击地图获取坐标并输出
    查看>>
    Openlayers中设置定时绘制和清理直线图层
    查看>>
    Openlayers图文版实战,vue项目从0到1做基础配置
    查看>>
    Openlayers实战:modifystart、modifyend互动示例
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    Openlayers高级交互(8/20):选取feature,平移feature
    查看>>
    openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
    查看>>
    OpenLDAP(2.4.3x)服务器搭建及配置说明
    查看>>
    OpenLDAP编译安装及配置
    查看>>
    OpenMCU(一):STM32F407 FreeRTOS移植
    查看>>
    OpenMCU(三):STM32F103 FreeRTOS移植
    查看>>
    OpenMCU(二):GD32E23xx FreeRTOS移植
    查看>>
    OpenMetadata 命令执行漏洞复现(CVE-2024-28255)
    查看>>
    OpenMMLab | S4模型详解:应对长序列建模的有效方法
    查看>>
    OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
    查看>>
    OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
    查看>>
    OpenMV入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>