Golang之flag包的使用

Golang flag包使用指南:让你的程序支持命令行参数 在软件开发过程中,命令行参数的使用是非常常见的。通过命令行参数,用户可以在程序启动时动态地传递一些配置信息,从而使程序具有更高的灵活性和可配置性。Golang的flag包为开发者提供了一种简单而强大的方式来处理命令行参数。本文的目的是全面介绍Golang flag包的使用方法,涵盖从基础概念到实际项目应用的各个方面,帮助开发者能够熟练运用flag包来实现程序对命令行参数的支持。 阅读详情

1.1 flag简介

import “flag”

flag包实现了命令行参数的解析。

要求:

使用flag.String(), Bool(), Int()等函数注册flag,下例声明了一个整数flag,解析结果保存在*int指针ip里:

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

如果你喜欢,也可以将flag绑定到一个变量,使用Var系列函数:

var flagvar int
func init() {
	flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
}

或者你可以自定义一个用于flag的类型(满足Value接口)并将该类型用于flag解析,如下:

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

对这种flag,默认值就是该变量的初始值。

在所有flag都注册之后,调用:

flag.Parse()

来解析命令行参数写入注册的flag里。

解析之后,flag的值可以直接使用。如果你使用的是flag自身,它们是指针;如果你绑定到了某个变量,它们是值。

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

1.2 flag 包概述

flag 包实现了命令行参数的解析。

1.2.1 定义 flags 有两种方式

1)flag.Xxx(),其中 Xxx 可以是 Int、String,Bool 等;返回一个相应类型的指针,如:

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

第一个参数 :flag名称为flagname
第二个参数 :flagname默认值为1234
第三个参数 :flagname的提示信息

返回的ip是指针类型,所以这种方式获取ip的值应该fmt.Println(*ip)
2)flag.XxxVar(),将 flag 绑定到一个变量上,如:

var flagValue int
flag.IntVar(&flagValue, "flagname", 1234, "help message for flagname")

第一个参数 :接收flagname的实际值的
第二个参数 :flag名称为flagname
第三个参数 :flagname默认值为1234
第四个参数 :flagname的提示信息
这种方式获取ip的值fmt.Println(ip)就可以了:

1.2.2 自定义 Value

另外,还可以创建自定义 flag,只要实现 flag.Value 接口即可(要求 receiver 是指针),这时候可以通过如下方式定义该 flag:

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

例如,解析我喜欢的编程语言,我们希望直接解析到 slice 中,我们可以定义如下 sliceValue类型,然后实现Value接口:

package main

import (
    "flag"
    "fmt"
    "strings"
)

//定义一个类型,用于增加该类型方法
type sliceValue []string

//new一个存放命令行参数值的slice
func newSliceValue(vals []string, p *[]string) *sliceValue {
    *p = vals
    return (*sliceValue)(p)
}

/*
Value接口:
type Value interface {
    String() string
    Set(string) error
}
实现flag包中的Value接口,将命令行接收到的值用,分隔存到slice里
*/
func (s *sliceValue) Set(val string) error {
    *s = sliceValue(strings.Split(val, ","))
    return nil
}

//flag为slice的默认值default is me,和return返回值没有关系
func (s *sliceValue) String() string {
    *s = sliceValue(strings.Split("default is me", ","))
    return "It's none of my business"
}

/*
可执行文件名 -slice="java,go"  最后将输出[java,go]
可执行文件名 最后将输出[default is me]
 */
func main(){
    var languages []string
    flag.Var(newSliceValue([]string{}, &languages), "slice", "I like programming `languages`")
    flag.Parse()

    //打印结果slice接收到的值
    fmt.Println(languages)
}

这样通过 -slice “go,php” 这样的形式传递参数,languages 得到的就是 [go, php]。如果不加-slice参数则打印默认值[default is me]
flag 中对 Duration 这种非基本类型的支持,使用的就是类似这样的方式,即同样实现了Value接口。

1.2.3 解析 flag

在所有的 flag 定义完成之后,可以通过调用 flag.Parse() 进行解析。
命令行 flag 的语法有如下三种形式:

-flag // 只支持bool类型
-flag=x
-flag x // 只支持非bool类型

以上语法对于一个或两个‘-’号,效果是一样的,但是要注意对于第三种情况,只能用于非 bool 类型的 flag。原因是:如果支持,那么对于这样的命令 cmd -x *,如果有一个文件名字是:0或false等,则命令的原意会改变(bool 类型可以和其他类型一样处理,其次 bool 类型支持 -flag 这种形式,因为Parse()中,对 bool 类型进行了特殊处理)。默认的,提供了 -flag,则对应的值为 true,否则为 flag.Bool/BoolVar 中指定的默认值;如果希望显示设置为 false 则使用 -flag=false。
int 类型可以是十进制、十六进制、八进制甚至是负数;bool 类型可以是1, 0, t, f, true, false, TRUE, FALSE, True, False。Duration 可以接受任何 time.ParseDuration 能解析的类型。

注:如果bool类型的参数在命令行中用了-flag false这种形式时,其后的参数都会被当做非flag(non-flag)参数,non-flag 参数后面解释。

1.3 类型和函数

在看类型和函数之前,先看一下变量。
ErrHelp:该错误类型用于当命令行指定了 ·-help` 参数但没有定义时。
例如1.2.2例子中:如果执行时用了-help或者-h时就会输出help message:

Usage of myflag.exe:
  -slice languages
        I like programming languages

Usage:这是一个函数,用于输出所有定义了的命令行参数和帮助信息(usage message)。一般,当命令行参数解析出错时,该函数会被调用。我们可以指定自己的 Usage 函数,即:flag.Usage = func(){}
例如1.1示例中:如果执行时用了-help时就会输出和-h一样的usage message。

1.3.1 函数

go标准库中,经常这么做:

定义了一个类型,提供了很多方法;为了方便使用,会实例化一个该类型的实例(通用),这样便可以直接使用该实例调用方法。比如:encoding/base64 中提供了 StdEncoding 和 URLEncoding 实例,使用时:base64.StdEncoding.Encode()

在 flag 包使用了有类似的方法,比如 CommandLine 变量,只不过 flag 进行了进一步封装:将 FlagSet 的方法都重新定义了一遍,也就是提供了一系列函数,而函数中只是简单的调用已经实例化好了的 FlagSet 实例:CommandLine 的方法。这样,使用者是这么调用:flag.Parse() 而不是 flag. CommandLine.Parse()。(Go 1.2 起,将 CommandLine 导出,之前是非导出的)
这里不详细介绍各个函数,其他函数介绍可以参考astaxie的gopkg——flag章节。

1.3.2 类型(数据结构)

1)ErrorHandling

 type ErrorHandling int

该类型定义了在参数解析出错时错误处理方式。定义了三个该类型的常量:

const (
    ContinueOnError ErrorHandling = iota
    ExitOnError
    PanicOnError
)

三个常量在源码的 FlagSet 的方法 parseOne() 中使用了。
2)Flag

// A Flag represents the state of a flag.
type Flag struct {
    Name     string // name as it appears on command line
    Usage    string // help message
    Value    Value  // value as set
    DefValue string // default value (as text); for usage message
}

Flag 类型代表一个 flag 的状态。
比如,对于命令:./nginx -c /etc/nginx.conf,相应代码是:

flag.StringVar(&c, "c", "conf/nginx.conf", "set configuration `file`")

则该 Flag 实例(可以通过 flag.Lookup(“c”) 获得)相应各个字段的值为:

&Flag{
    Name: c,
    Usage: set configuration file,
    Value: /etc/nginx.conf,
    DefValue: conf/nginx.conf,
}

Lookup函数:获取flag集合中名称为name值的flag指针,如果对应的flag不存在,返回nil
示例:

package main

import (
    "flag"
    "fmt"
)

//定义一个全局变量的命令行接收参数
var testFlag = flag.String("test", "default value", "help message.")

//打印值的函数
func print(f *flag.Flag) {
    if f != nil {
        fmt.Println(f.Value)
    } else {
        fmt.Println(nil)
    }
}

func main() {
    //没有用flag.Parse()解析前
    fmt.Print("test:")
    print(flag.Lookup("test"))
    fmt.Print("test1:")
    print(flag.Lookup("test1"))

    //用flag.Parse()解析后
    flag.Parse()
    fmt.Print("test:")
    print(flag.Lookup("test"))
    fmt.Print("test1:")
    print(flag.Lookup("test1"))
}

运行结果:

//  ./testlookup -test "12345"      
test:default value
test1:<nil>
test:12345
test1:<nil>

3)FlagSet

// A FlagSet represents a set of defined flags.
type FlagSet struct {
    // Usage is the function called when an error occurs while parsing flags.
    // The field is a function (not a method) that may be changed to point to
    // a custom error handler.
    Usage func()

    name string // FlagSet的名字。CommandLine 给的是 os.Args[0]
    parsed bool // 是否执行过Parse()
    actual map[string]*Flag // 存放实际传递了的参数(即命令行参数)
    formal map[string]*Flag // 存放所有已定义命令行参数
    args []string // arguments after flags // 开始存放所有参数,最后保留 非flag(non-flag)参数
    exitOnError bool // does the program exit if there's an error?
    errorHandling ErrorHandling // 当解析出错时,处理错误的方式
    output io.Writer // nil means stderr; use out() accessor
}

4)Value 接口

// Value is the interface to the dynamic value stored in a flag.
// (The default value is represented as a string.)
type Value interface {
    String() string
    Set(string) error
}

所有参数类型需要实现 Value 接口,flag 包中,为int、float、bool等实现了该接口。借助该接口,我们可以自定义flag。(上文已经给了具体的例子)

1.4 主要类型的方法(包括类型实例化)

flag 包中主要是 FlagSet 类型。

1.4.1 实例化方式

NewFlagSet() 用于实例化 FlagSet。预定义的 FlagSet 实例 CommandLine 的定义方式:

// The default set of command-line flags, parsed from os.Args.
var CommandLine = NewFlagSet(os.Args[0], ExitOnError)

可见,默认的 FlagSet 实例在解析出错时会退出程序。
由于 FlagSet 中的字段没有 export,其他方式获得 FlagSet实例后,比如:FlagSet{} 或 new(FlagSet),应该调用Init() 方法,以初始化 name 和 errorHandling,否则 name 为空,errorHandling 为 ContinueOnError(errorHandling默认为0)。

1.4.2 定义 flag 参数的方法

这一系列的方法都有两种形式,在一开始已经说了两种方式的区别。这些方法用于定义某一类型的 flag 参数。

1.4.3 解析参数(Parse)
func (f *FlagSet) Parse(arguments []string) error

从参数列表中解析定义的 flag。方法参数 arguments 不包括命令名,即应该是os.Args[1:]。事实上,flag.Parse() 函数就是这么做的:

// Parse parses the command-line flags from os.Args[1:].  Must be called
// after all flags are defined and before flags are accessed by the program.
func Parse() {
    // Ignore errors; CommandLine is set for ExitOnError.
    CommandLine.Parse(os.Args[1:])
}

该方法应该在 flag 参数定义后而具体参数值被访问前调用。
如果提供了 -help 参数(命令中给了)但没有定义(代码中没有),该方法返回 ErrHelp 错误。默认的 CommandLine,在 Parse 出错时会退出程序(ExitOnError)。
为了更深入的理解,我们看一下 Parse(arguments []string) 的源码:

func (f *FlagSet) Parse(arguments []string) error {
    f.parsed = true
    f.args = arguments
    for {
        seen, err := f.parseOne()
        if seen {
            continue
        }
        if err == nil {
            break
        }
        switch f.errorHandling {
        case ContinueOnError:
            return err
        case ExitOnError:
            os.Exit(2)
        case PanicOnError:
            panic(err)
        }
    }
    return nil
}

真正解析参数的方法是非导出方法 parseOne。
结合 parseOne 方法,我们来解释 non-flag 以及包文档中的这句话:

Flag parsing stops just before the first non-flag argument ("-" is a non-flag argument) or after the terminator "--".

我们需要了解解析什么时候停止。
根据 Parse() 中 for 循环终止的条件(不考虑解析出错),我们知道,当 parseOne 返回 false, nil 时,Parse 解析终止。正常解析完成我们不考虑。看一下 parseOne 的源码发现,有三处会返回 false, nil。
在这里先说一下non-flag命令行参数是指不满足命令行语法的参数,如命令行参数为cmd -flag=true abc则第一个非flag命令行参数为“abc”
1)参数列表长度为0

if len(f.args) == 0 {
        return false, nil
}

2)第一个 non-flag 参数
s := f.args[0]
if len(s) == 0 || s[0] != '-' || len(s) == 1 {
    return false, nil
}

也就是,当遇到单独的一个"-“或不是”-"开始时,会停止解析。比如:

./nginx - 或 ./nginx ba或者./nginx

这两种情况,-c 都不会被正确解析。像该例子中的"-“或ba(以及之后的参数),我们称之为 non-flag参数。
3)两个连续的”–"

if s[1] == '-' {
    num_minuses++
    if len(s) == 2 { // "--" terminates the flags
        f.args = f.args[1:]
        return false, nil
    }
}

也就是,当遇到连续的两个"-"时,解析停止。如:

./nginx –

*下面这种情况是可以正常解析的:

./nginx -c –

这里的"–"会被当成是 c 的值
parseOne 方法中接下来是处理 -flag=x 这种形式,然后是 -flag 这种形式(bool类型)(这里对bool进行了特殊处理),接着是 -flag x 这种形式,最后,将解析成功的 Flag 实例存入 FlagSet 的 actual map 中。
另外,在 parseOne 中有这么一句:
f.args = f.args[1:]

也就是说,每执行成功一次 parseOne,f.args 会少一个。所以,FlagSet 中的 args 最后留下来的就是所有 non-flag 参数。

1.4.4 Arg(i int) 和 Args()、NArg()、NFlag()

Arg(i int) 和 Args() 这两个方法就是获取 non-flag 参数的;NArg()获得 non-flag 的个数;NFlag() 获得 FlagSet 中 actual 长度(即被设置了的参数个数)。

1.4.5 Visit/VisitAll

这两个函数分别用于访问 FlatSet 的 actual(存放参数值实际Flag的map) 和 formal(存放参数名默认Flag的map) 中的 Flag,而具体的访问方式由调用者决定。
具体使用demo见:

func (f FlagSet) Visit(fn func(Flag))
func (f FlagSet) VisitAll(fn func(Flag))

1.4.6 PrintDefaults()

打印所有已定义参数的默认值(调用 VisitAll 实现),默认输出到标准错误,除非指定了 FlagSet 的 output(通过SetOutput() 设置)。
在1.1示例中有使用。还可以参考:
func PrintDefaults()

1.4.7 Set(name, value string)

将名称为name的flag的值设置为value, 成功返回nil。
demo请见:
func Set(name, value string) error

1.5 总结

使用建议:虽然上面讲了那么多,一般来说,我们只简单的定义flag,然后 parse,就如同开始的例子一样。
如果项目需要复杂或更高级的命令行解析方式,可以使用 https://github.com/urfave/cli 或者 https://github.com/spf13/cobra 这两个强大的库。

Golang flag包最佳实践:高效处理命令行参数 在软件开发中,命令行参数解析是构建工具、脚本和服务的基础功能。Golang的flag包作为标准库提供了简洁高效的参数解析方案,但其灵活性和扩展性常被低估。全面解析flag包的核心API与实现原理演示从基础用法到高级特性的渐进式实践提供工业级命令行工具的设计模式与最佳实践对比分析常见参数解析场景的解决方案目标范围覆盖flag包的完整功能体系,包括基础标志定义、类型安全解析、自定义验证逻辑、子命令支持(结合flag与os包)、性能优化等。核心概念:解析命令行参数的基本模型与flag包架构。 阅读详情

相关推荐

Golang flag包常见问题与解决方案

Golang的flag包是标准库中用于命令行参数解析的核心组件,广泛应用于CLI工具、服务启动配置、数据处理脚本等场景。本文聚焦开发者在使用flag包时遇到的高频问题,涵盖基础语法、类型支持、解析逻辑、错误处理、扩展场景等维度,提供从原理分析到代码实现的完整解决方案。核心概念:解析flag包的核心组件与解析流程原理剖析:类型系统、解析算法与内存模型实战指南:从基础案例到复杂场景的代码实现问题解集:20+常见问题的诊断与修复方案生态扩展:配套工具、高级库与最佳实践命令行标志(Flag):通过或--

AI Agent Harness Engineering 1108

[Golang flag]命令行参数解析及flag包详解

这篇文章带大家学习了一遍golang提供的flag包,学完后就会各种花式写命令行程序了。

夏日白云的boke 7195

强化学习_06_pytorch-TD3实践(BipedalWalkerHardcore-v3)

DDPG的critic会高估, 从而导致actor策略失败。TD3是增加了三个关键技巧优化DDPG。经过优化后的TD3(Twin Dalayed DDPG 双延迟深度确定性策略梯度算法)适合于具有高维连续动作空间的任务。

RL小站 2690

Go - flag:命令行flags解析

Day Day GOflag作为go的基础模块,属于必知必会的常用模块,flag实现命令行flag解析,比如ls -l中的-l,当然golang内置的flag也可以实现类似docker ...

Marionxue 1万+

Silly Tavern(酒馆)AI 角色扮演下载与安装教程(Windows本地部署)

SillyTavern是一款开源AI角色扮演前端工具,支持沉浸式对话和长期角色互动。本文详细介绍了在Windows系统F盘部署SillyTavern的完整流程,包括下载项目、安装Node.js和Git环境、配置路径、启动服务等关键步骤,并特别说明非系统盘路径可能遇到的npm安装问题及解决方法。成功启动后,用户可通过浏览器访问本地地址使用该工具进行AI角色扮演互动。

Tan3851的博客 1万+

TMC2209串口配置实战:从寄存器解析到电机精准控制

本文详细解析TMC2209步进电机驱动芯片的串口配置方法,从硬件连接到UART通信协议,再到核心寄存器功能详解。通过实战案例展示电流控制、微步细分和速度调节等关键配置,帮助工程师实现电机精准控制,并提供了常见故障诊断和优化技巧。

f6g7h8i9j的博客 1174

golang flag 包_如何在Go中使用Flag包

golang flag 包 介绍 (Introduction) Command-line utilities are rarely useful out of the box without additional configuration. Good defaults are important, but useful utilities need to accept configuration...

765

车载摄像头+max96712 + rk3568 调试过程中遇到的问题

本文主要讲述本人在调试rk3568通过mipi-csi2链接max967812,max96712再外接4路车载摄像头过程中遇到的问题,以及最终如何解决这些问题。图中会贴上很多重要且关键的波形图,以便读者在调试过程中进行比对,分析。 如果在调试过程中,mipi总线上的波形没得什么问题的话,还是抓图失败的情况下,需要着重检查 频率,lane数,摄像头分辨率,摄像头输入图像格式等重要配置。

Amelio Ming 2066

如何在Go中使用Flag包

标志使你的应用程序在更多的环境中更有用,因为它们让你的用户控制程序如何执行。为用户提供有用的默认值很重要,但也应该让他们有机会覆盖不适合他们情况的设置。你已经看到了flag包为用户提供了灵活的配置选项。你可以选择一些简单的标志,或者构建一组可扩展的子命令。无论哪种情况,使用flag包都将帮助您构建具有悠久历史的灵活和可脚本化命令行工具风格的实用程序。

码觉客的博客 1万+

cadence—virtuosoic617的使用技巧收集区

cadence使用

qq_33599939的博客 3万+

告别Qweb!用ReportBro在Odoo 13-19版本中5步搞定动态报表

本文介绍了如何在Odoo 13-19版本中使用ReportBro替代Qweb快速实现动态报表设计。通过5步集成指南,包括环境准备、前端集成、后端服务搭建等,展示了ReportBro在可视化设计、即时预览和多格式输出(PDF/XLSX)方面的优势,显著提升开发效率和报表灵活性。

mac99的博客 800

golang flag包使用笔记

本文原文地址:flag - 命令行参数解析 在写命令行程序(工具、server)时,对命令参数进行解析是常见的需求。各种语言一般都会提供解析命令行参数的方法或库,以方便程序员使用。如果命令行参数纯粹自己写代码来解析,对于比较复杂的,还是挺费劲的。在 go 标准库中提供了一个包:flag,方便进行命令行解析。 首先,我们看flag包可以做什么,它具有什么样的能力。 1.1 使用示例: 我们以 ng...

技术宅,专注云原生、Go、Linux、Java等技术分享,原创文章、效率工具、实战解决方案!关注我,了解互联网动态,学 IT 不迷路 1294

手把手教你用支付宝密钥工具生成RSA2密钥对(含Windows/Mac操作截图)

本文详细介绍了如何使用支付宝密钥工具生成RSA2密钥对,包括Windows和Mac平台的操作步骤与截图。从工具下载、安装到密钥生成、配置支付宝平台,再到开发环境集成实战,手把手教你完成支付宝支付接口对接。特别强调密钥安全管理和最佳实践,帮助开发者避免常见安全隐患。

mongodb5scout的博客 257

go语言flag包使用

一、命令行语法 命令行语法主要有以下几种形式: cmd -flag //只支持bool类型 cmd -flag=x cmd -flag x //只支持非bool类型 以上语法对于一个或两个‘-’号是一样的 对于整形flag,合法的值可以为1234,0664,0x1234或负数等。对于布尔型flag,可以为1,0,t,f,T,F,true,false,TRUE,FALSE,True,...

oguro的博客 4509

VTK实战完整教程介绍

该专栏以VTK提供的Example为基础,讲解VTK中的相关接口和使用方法。订阅该专栏,带你了解所有VTK的功能,以便VTK更好的解决工作中遇到的问题。一起学习起来吧!

qq_40041064的博客 2506

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

golang flag 包的使用指北

实际上 golang 的 flag 包是用于处理命令行参数的工具包,我们可以基于这个包来开发自定义的命令行工具对于命令行,相信大家都不陌生吧,学过 C 的就知道,如下代码是否很熟悉。

m0_37322399的博客 853

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Go flag包使用详解

一. flag包用来做什么 不管是在linux还是windows下,都支持在程序运行的情况下传递命令行参数。如: ./demo -i 10 -b=true 关于如何将命令行的参数取出来,我们可以通过os包来实现。 通过range os.Args,我们可以取出所有的命令行参数,但是这种方法存在一定的局限性。这种方法没有将每一个参数的标志和其值映射起来(对于./demo -i 10 -b=true来说,-i是参数的标志,10是该标志的值)。 flag包相比os提供的取命令行参数方法相比,flag包在取

信仰的博客 975

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Go中Flag包的使用

go中flag包使用

weixin_44048140的博客 1485

「每周译Go」在 Go 里面如何使用 Flag 包

????我在这儿Gophers,今天是《How To Code In Go》系列的最后一篇了!坚持学习下来的每位 Gopher 都是 NB 的!给自己一个大大赞!若需要完整版合集可在我们的收录合集 #How To Code In Go (文末有,去点)点击查看 或至公众号后台回复 [codeingo] 查看 pdf 获取方法哦。在 Go 里面如何使用 Flag 包目录在 Go 中导入包理解 Go 中...

Go中国 357

Golang flag包使用详解(一)

概述 flag包提供了一系列解析命令行参数的功能接口 命令行语法 命令行语法主要有以下几种形式 -flag //只支持bool类型 -flag=x -flag x //只支持非bool类型 以上语法对于一个或两个‘-’号,效果是一样的,但是要注意对于第三种情况,只支持非bool类型,原因是碰到如下情况时 cmd -x * *为0,false有可能表示一个文件名

thulpf的专栏 3228

Go语言:flag包使用详解(一)

转载于文章Golang flag包使用详解(一),Go语言官方教程的地址为:https://golang.org/pkg/flag/#pkg-overview 概述 flag包提供了一系列解析命令行参数的功能接口 命令行语法 命令行语法主要有以下几种形式 -flag //只支持bool类型 -flag=x -flag x //只支持非bool类型 以上语法对于一个或两个‘-’号,效果是一样的,但...

freshman94的博客 4460

【go语言】4.2.1 flag 包的使用

你可以使用flag包的StringVarIntVarBoolVar等函数定义一个标志。这些函数接受三个参数:一个指向变量的指针,标志的名字,标志的默认值和标志的描述。

Andy0214的专栏 5703

Go语言flag包使用

Go语言flag包使用 前言 Hey,大家好,我是码农,星期八,这次来讲一下的Go语言中,比较常用的一个包flag包。 这个包的用途是接收命令行参数的。 如果你玩过Mysql,肯定对这个界面很熟悉 对的,就是干这个用的,接收命令行参数 注意 这一章所学的任何代码,都要编译成.exe才能跑,禁止右击 run!! os.Args 其实Go的os模块,也带有这个功能,但是这个功能有点欠缺。 不能接收像-u root -p 3306这样指定key的值。 只能接收像root 3306这样的方式。 简单了解一下吧。

tianyi19的博客 587

Golang: 使用flag包进行命令行参数解析

最近在使用go开发cli(command-line-interface)时,通过对于官方文档以及他人博客的学习,在此写下个人认为更适合自己往后回顾的关于flag的使用说明。工欲善其事必先利其器,先奉上flag官方文档解析Demo0:package main import ( "fmt" "flag" ) func main() { t1 := flag.Int("w",0,"

Seven_Anon的博客 4154

golang 使用系统自带的flag包、os包获取命令行参数

1、通过os.Args包获取命令行参数,注意需要使用go build filename 先将文件转成二进制文件,再运行携带参数 package main import ( "fmt" "os" ) //获取命令行参数 func main() { fmt.Println("命令行参数为:") for _,arg := range os.Args{ fmt.Println(arg) } } #获取可执行文件 go build main.go #执行可执行文件 main.exe arg1

weixin_44540711的博客 579
上一篇: Golang中http的小知识汇总
下一篇: Golang中的list解析
那记忆微凉
博客等级 码龄9年 412粉丝 387原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值