三门峡市网站建设_网站建设公司_在线商城_seo优化
2025/12/18 22:24:36 网站建设 项目流程
// 定义命令行参数对应的变量,这三个变量都是指针类型
var cliName = flag.String("name", "nick", "Input Your Name")
var cliAge = flag.Int("age", 28, "Input Your Age")
var cliGender = flag.String("gender", "male", "Input Your Gender")// 定义一个值类型的命令行参数变量,在 Init() 函数中对其初始化
// 因此,命令行参数对应变量的定义和初始化是可以分开的
var cliFlag int
func Init() {flag.IntVar(&cliFlag, "flagname", 1234, "Just for demo")
}> 

这是两种定义命令行参数的方式:

// 定义命令行参数对应的变量,这三个变量都是指针类型
var cliName = flag.String("name", "nick", "Input Your Name")
var cliAge = flag.Int("age", 28, "Input Your Age")
var cliGender = flag.String("gender", "male", "Input Your Gender")

这是第一种方式,这种方式定义的变量都是指针类型的。
直接返回指针方式。适用于所需参数不是特别多的场景。

  • 函数直接返回指针类型变量
  • 变量定义和初始化在同一行完成
  • 使用时需要解引用(如*cliName)
var cliFlag int
func Init() {flag.IntVar(&cliFlag, "flagname", 1234, "Just for demo")
}> 

这是第二种方式,这种方式是:变量地址传递方式

  • 需要先定义值类型变量
  • 通过变量地址(&)传递给 flag 函数
  • 可以将定义和初始化分开
  • 使用时直接使用变量名

直接返回指针方式适用场景:

  • 简单的命令行参数定义
  • 参数较少的情况
  • 不需要复杂的初始化逻辑
  • 快速原型开发

变量地址传递方式适用场景:

  • 需要将参数定义和初始化分离的情况
  • 有复杂的初始化逻辑
  • 需要在 init 函数中初始化
  • 大型项目中的模块化设计
  • 需要对参数进行更多控制的场景

但是在大多安全工具开发过程中,使用第一种方式进行定义命令行参数的定义。

第一种方式的定义有很多:

var (portFlag    = flag.String("p", "", "")timeout     = flag.Duration("t", defaultTimeout, "")showVersion = flag.Bool("v", false, "")showHelp    = flag.Bool("h", false, "")standMode   = flag.Bool("stand", false, "")lieMode     = flag.Bool("lie", false, "")retries     = flag.Int("retries", defaultRetries, ""))

这样就可以快速的定义很多命令行参数。

需要注意的是:

通过flag.String定义的命令行参数中的值portFlag = flag.String("p", "", "")
第一个值:"p":这个是执行命令的时候-p时需要携带的值。
第二个值:""是默认值
第三个值:-h时的提示词

例如:

package mainimport ("flag""fmt"
)// 直接声明指针变量 + 绑定命令行参数
var cliAge = flag.Int("age", 28, "Input Your Age")
//命令行参数:age
//默认值:28
//-h时帮助文本:Input Your Agefunc main() {flag.Parse() // 解析命令行参数fmt.Println("年龄:", *cliAge) // 必须解引用取值
}
//输入:go run name.go -age 18
//输出:年龄:18

其中:flag.Parse() // 解析命令行参数的作用就是接收并解析命令行中的参数,解析函数将会在碰到第一个非 flag 命令行参数时停止。

-isbool    (一个 - 符号,布尔类型该写法等同于 -isbool=true)
-age=x     (一个 - 符号,使用等号)
-age x     (一个 - 符号,使用空格)
--age=x    (两个 - 符号,使用等号)
--age x    (两个 - 符号,使用空格)

借鉴博客:https://www.cnblogs.com/sparkdev/p/10812422.html

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询