PHP中flag参数,flag(命令行参数解析flag包)

本文介绍了在PHP中如何使用flag包进行命令行标志解析。通过`flag.String()`、`flag.Bool()`等方法定义标志,并在程序初始化阶段使用`flag.Parse()`来解析命令行参数。此外,文章还展示了如何创建自定义标志类型和使用`flag.Var()`函数绑定变量。示例代码涵盖了不同类型的标志,包括字符串、布尔值、自定义间隔类型等。
摘要由CSDN通过智能技术生成

import "flag"

概述

索引

例子

概述

Flag 包实现了命令行标志解析。

用法:

使用 flag.String(),Bool(),Int() 等定义标志。

这声明了一个整型 flag,-flagname,都存储在指针 ip 中,类型为 *int 。

import "flag"var ip = flag.Int("flagname", 1234, "help message for flagname")

如果你喜欢,你可以使用 Var() 函数将标志绑定到一个变量。

var flagvar int

func init() {

flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")}

或者,您可以创建满足 Value 接口(使用指针接收器)的自定义标志,并将它们耦合以标记解析

flag.Var(&flagVal, "name", "help message for flagname")

对于这样的标志,默认值只是变量的初始值。

所有标志定义后,调用

flag.Parse()

来将命令行解析为定义的标志。

标志可以直接使用。如果你自己使用标志,它们都是指针; 如果你绑定到变量,它们就是值。

fmt.Println("ip has value ", *ip)fmt.Println("flagvar has value ", flagvar)

解析后,标志后面的参数可用作切片 flag.Args() 或单独作为 flag.Arg(i)。参数从 0 到 flag.NArg()- 1 索引。

命令行标志语法:

-flag-flag=x-flag x  // 仅限非布尔标志

可以使用一个或两个减号;它们是等价的。由于命令的含义,最后一种形式不允许用于布尔标志

cmd -x *

如果有一个名为 0,false 等的文件,它将会改变。你必须使用 -flag = false 来关闭布尔标志。

标志解析在第一个非标志参数(“ - ”是非标志参数)之前停止,或者在终止符“ - ”之后停止。

整数标志接受 1234,0664,0x1234 并且可能是负数。布尔标志可能是:

1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False

持续时间标志接受对 time.ParseDuration 有效的任何输入。

默认的一组命令行标志由顶层函数控制。FlagSet 类型允许您定义独立的标志集,例如在命令行界面中实现子命令。FlagSet 的方法类似于命令行标志集的顶层函数。

// 这些示例演示了对标志包的更复杂的使用。package mainimport ("errors""flag""fmt""strings""time")// 示例1:名为“species”的单个字符串标志,默认值为“gopher”。var species = flag.String("species", "gopher", "the species we are studying")// 示例2:共享变量的两个标志,因此我们可以使用速记。// 初始化的顺序是未定义的,因此请确保两者都使用// 相同的默认值。 必须使用init函数设置它们。var gopherType string

func init() {const (

defaultGopher = "pocket"

usage         = "the variety of gopher")

flag.StringVar(&gopherType, "gopher_type", defaultGopher, usage)

flag.StringVar(&gopherType, "g", defaultGopher, usage+" (shorthand)")}// 示例3:用户定义的标志类型,持续时间片。type interval []time.Duration// String是格式化标志值的方法,是flag.Value接口的一部分。// String方法的输出将用于诊断。func (i *interval) String() string {return fmt.Sprint(*i)}// Set是设置标志值的方法,flag.Value接口的一部分。// Set的参数是要解析以设置标志的字符串。// 这是一个以逗号分隔的列表,因此我们将其拆分。func (i *interval) Set(value string) error {// 如果我们想允许多次设置标志,// 累积值,我们将删除此if语句。// 这将允许诸如此类的用法//-deltaT 10s -deltaT 15s// 和其他组合。if len(*i) > 0 {return errors.New("interval flag already set")}for _, dt := range strings.Split(value, ",") {

duration, err := time.ParseDuration(dt)if err != nil {return err}*i = append(*i, duration)}return nil}// 定义一个标志来累积持续时间。 因为它有特殊的类型,// 我们需要使用Var函数,因此在期间创建标志// init。var intervalFlag interval

func init() {// 将命令行标志绑定到intervalFlag变量和// 设置用法消息。

flag.Var(&intervalFlag, "deltaT", "comma-separated list of intervals to use between events")}func main() {// 所有有趣的部分都是上面声明的变量,但是// 要使标志包能够看到那里定义的标志,就必须这样做// 执行,通常在main(不是init!)的开头执行://flag.Parse()// 我们不在这里运行它,因为这不是主要功能//测试套件已经解析了标志。}

索引

Variables

func Arg(i int) string

func Args() []string

func Bool(name string, value bool, usage string) *bool

func BoolVar(p *bool, name string, value bool, usage string)

func Duration(name string, value time.Duration, usage string) *time.Duration

func DurationVar(p *time.Duration, name string, value time.Duration, usage string)

func Float64(name string, value float64, usage string) *float64

func Fl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值