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

    你可能感兴趣的文章
    php7.1.6 + redis
    查看>>
    php7中使用php_memcache扩展
    查看>>
    PHP7中十个需要避免的坑
    查看>>
    php7和PHP5对比的新特性和性能优化
    查看>>
    PHP7安装pdo_mysql扩展
    查看>>
    PHP7实战开发简单CMS内容管理系统(7) 后台登录架构 用户登录校验
    查看>>
    php7,从phpExcel升级到PhpSpreadsheet
    查看>>
    PHP8中match新语句的操作方法
    查看>>
    PHP:第一章——PHP中常量和预定义常量
    查看>>
    PHP:第一章——PHP中的位运算
    查看>>
    phpcms
    查看>>
    phpcms 2008 product.php pagesize参数代码注射漏洞
    查看>>
    phpcms V9 自定义添加 全局变量{DIY_PATH}方法
    查看>>
    Redis五种核心数据结构的基本使用与应用场景
    查看>>
    PHPCMS多文件上传和上传数量限制
    查看>>
    phpEnv的PHP集成环境
    查看>>
    PHPExcel一些基本设置总结
    查看>>
    PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/c...
    查看>>
    PHPMailer发送邮件
    查看>>
    phpmailer发送邮件,可以带附件
    查看>>