博客
关于我
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/

    你可能感兴趣的文章
    OSPF技术连载22:OSPF 路径选择 O > O IA > N1 > E1 > N2 > E2
    查看>>
    OSPF技术连载5:OSPF 基本配置,含思科、华为、Junifer三厂商配置
    查看>>
    OSPF技术连载8:OSPF认证:明文认证、MD5认证和SHA-HMAC验证
    查看>>
    OSPF故障排除技巧
    查看>>
    OSPF的七种类型LSA
    查看>>
    OSPRay 开源项目教程
    查看>>
    OS模块
    查看>>
    OS第3章 —— 进程调度和死锁
    查看>>
    overlay(VLAN,VxLAN)、underlay网络、大二层概述
    查看>>
    OWASP漏洞原理<最基础的数据库 第二课>
    查看>>
    OWL本体语言
    查看>>
    P with Spacy:自定义文本分类管道
    查看>>
    SpringBoot中集成influxdb-java实现连接并操作Windows上安装配置的influxDB(时序数据库)
    查看>>
    Padding
    查看>>
    paddlehub安装及对口罩检测
    查看>>
    SpringBoot中集成Actuator实现监控系统运行状态
    查看>>
    paddle的两阶段基础算法基础
    查看>>
    Page Object模式:为什么它是Web自动化测试的必备工具
    查看>>
    SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider using “allowedOriginPatterns“ in
    查看>>
    PageHelper 解析及实现原理
    查看>>