go-options-一个命令行标识、配置文件值解析库

1、go-options 简介

一个用于解析命令行标志、配置文件和默认结构体值去设置配置值的类库。

项目地址:github.com/mreiferson/go-options

主要目的:将命令行flags(FlagSet)或者一个外部解析的配置文件(可以是一个map)设置的 配置值 解析设置到一个结构体struts的成员 上

options支持的结构体的成员tag:"flag","cfg"和“deprecated”

值按以下优先级解析(从高到低):

1. Command line flag

2. Deprecated command line flag

3. Config file value

4. Get() value (if Getter)

5. Options struct default value

2、实例

 

package main

import (
   "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")

   // parse command line arguments here
   //flagSet.Parse(os.Args[1:])
   flagSet.Parse([]string {"-timeout=5s"})

   //创建Options
   opts := &Options{
      MaxSize: 1,
      Timeout: time.Second,
   }
   // config map
   cfg := map[string]interface{}{
      "max-size":888,
      "timeout":"2h",
      "description":"description-info",
      "description1":"has noting",

   }
   fmt.Printf("%#v",opts)//&main.Options{MaxSize:1, Timeout:1000000000, Description:""}

   //解析命令行FlagSet和cfg
   //优先级 commandline FlagSet > cfg> struct values
   options.Resolve(opts,flagSet,cfg)
   fmt.Println()
   fmt.Printf("%#v",opts)
   //&main.Options{MaxSize:1024768, Timeout:5000000000, Description:"description-info"}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamCatcher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值