Go语言中使用flag包对命令行进行参数解析的方法

 更新时间:2016年04月21日 17:04:14   作者:leanote  
这篇文章主要介绍了Go语言中使用flag包对命令行进行参数解析的方法,文中举了一个实现flag.Value接口来自定义flag的例子,需要的朋友可以参考下

flag
flag 是Go 标准库提供的解析命令行参数的包。

使用方式:

flag.Type(name, defValue, usage)

其中Type为String, Int, Bool等;并返回一个相应类型的指针。

flag.TypeVar(&flagvar, name, defValue, usage)

将flag绑定到一个变量上。

自定义flag
只要实现flag.Value接口即可:

type Value interface {
  String() string
  Set(string) error
}

通过如下方式定义该flag:

flag.Var(&flagvar, name, usage)

示例

package main
import "flag"
import "fmt"
import "strconv"
type percentage float32
func (p *percentage) Set(s string) error {
  v, err := strconv.ParseFloat(s, 32)
  *p = percentage(v)
  return err
}
func (p *percentage) String() string { return fmt.Sprintf("%f", *p) }
func main() {
  namePtr := flag.String("name", "lyh", "user's name")
  agePtr := flag.Int("age", 22, "user's age")
  vipPtr := flag.Bool("vip", true, "is a vip user")
  var email string
  flag.StringVar(&email, "email", "lyhopq@gmail.com", "user's email")
  var pop percentage
  flag.Var(&pop, "pop", "popularity")
  flag.Parse()
  others := flag.Args()
  fmt.Println("name:", *namePtr)
  fmt.Println("age:", *agePtr)
  fmt.Println("vip:", *vipPtr)
  fmt.Println("pop:", pop)
  fmt.Println("email:", email)
  fmt.Println("other:", others)
}
$ ./command-line-flags
name: lyh
age: 22
vip: true
email: lyhopq@gmail.com
other: []
$ ./command-line-flags -name golang -age 4 -vip=true -pop 99 简洁 高并发 等等
name: golang
age: 4
vip: true
pop: 99
email: lyhopq@gmail.com
other: [简洁 高并发 等等]
$ ./command-line-flags -h
Usage of ./command-line-flags:
 -age=22: user's age
 -email="lyhopq@gmail.com": user's email
 -name="lyh": user's name
 -pop=0.0: popularity
 -vip=true: is a vip user

相关文章

  • 浅析Golang中float64的精度问题

    浅析Golang中float64的精度问题

    这篇文章主要来和大家一起探讨一下Golang中关于float64的精度问题,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-08-08
  • Go Java 算法之字符串解码示例详解

    Go Java 算法之字符串解码示例详解

    这篇文章主要为大家介绍了Go Java 算法之字符串解码示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • golang连接redis库及基本操作示例过程

    golang连接redis库及基本操作示例过程

    这篇文章主要介绍了golang连接redis库及基本操作示例过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Go语言数据结构之选择排序示例详解

    Go语言数据结构之选择排序示例详解

    这篇文章主要为大家介绍了Go语言数据结构之选择排序示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 详解Go语言中rand(随机数)包的使用

    详解Go语言中rand(随机数)包的使用

    在Golang中,有两个包提供了rand,分别为math/rand和crypto/rand对应两种应用场景。math/rand包实现了伪随机数生成器。也就是生成 整形和浮点型;crypto/rand包实现了用于加解密的更安全的随机数生成器。本文就来和大家详细讲讲math/rand的使用
    2022-08-08
  • Go语言基础go build命令用法及示例详解

    Go语言基础go build命令用法及示例详解

    这篇文章主要为大家介绍了Go语言基础go build命令用法及示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • Go语言中的Slice学习总结

    Go语言中的Slice学习总结

    这篇文章主要介绍了Go语言中的Slice学习总结,本文讲解了Slice的定义、Slice的长度和容量、Slice是引用类型、Slice引用传递发生“意外”等内容,需要的朋友可以参考下
    2014-11-11
  • Golang Socket Server自定义协议的简单实现方案

    Golang Socket Server自定义协议的简单实现方案

    这篇文章主要介绍了Golang Socket Server自定义协议的简单实现方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Golang中实现简单的Http Middleware

    Golang中实现简单的Http Middleware

    本文主要针对Golang的内置库 net/http 做了简单的扩展,实现简单的Http Middleware,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 详解Go语言中自定义结构体能作为map的key吗

    详解Go语言中自定义结构体能作为map的key吗

    在Go中,引用类型具有动态的特性,可能会被修改或指向新的数据,这就引发了一个问题—能否将包含引用类型的自定义结构体作为map的键呢,本文就来和大家想想讲讲
    2023-06-06

最新评论