1.23总结

package main

import (
"fmt"
"os"
)

func main() {
commandArgs := os.Args
fmt.Println(commandArgs)
}

执行程序: 递归浏览指定目录下所有文件

go run main.go --name ls --value /etc -r

输出: [/tmp/go-build2637413899/b001/exe/main --name ls --value /etc -r]

命令行参数解析 -- flag包
需要知晓程序的命令行需要传递哪些参数,如果没有传递该参数,那么默认值是什么,参数的说明

使用flag的流程:

  1. 初始化存放命令行参数的全局变量
  2. 在main包的init函数中注册需要解析的命令行参数,包含参数的类型、参数存放到哪个变量、参数的名称、参数的默认值、参数的使用说明
  3. 在定义解析命令行参数最后,添加 flag.Parse(),解析传递到程序的命令行参数到变量中
  4. 主函数中通过全局变量引用命令行参
  5. 运行主函数,通过 -<参数名>= 或 -<参数名> 方式传参

解析命令行参数的基本文法:

  1. flag.<类型>Var(<指针>, <参数名称>, <默认值>, <用法说明>)
  2. 等价方法: flag.<类型>(<参数名称>, <默认值>, <用法说明>)
  • 区别在于,Var后缀方法是通过指针将值存放到指针指向的变量,未带Var后缀的方法返回一个指定值的指针
  • 相同的,参数值不同则使用不同的类型,都包含参数的名称、参数的默认值、该参数使用说明
  • 类型是基本数据类型:int int64 uint uint64 string bool fl0at64 Duration
    package main

import (
"flag"
"fmt"
)

// 1. 声明保存命令行参数的变量
var (
name string
value string
isRecursive bool
)

func init() {
// 2. 注册需要解析的命令行参: 参数名、默认值、参数说明
flag.StringVar(&name, "name", "none", "执行命令的名称")
flag.StringVar(&value, "value", "none", "执行命令的参数")
flag.BoolVar(&isRecursive, "recursive", false, "是否递归")

// 3. 解析命令行参数
flag.Parse()

}

func main() {
// 4. 主程序中通过全局变量引用命令行参
fmt.Println(name, value, isRecursive)
}

输出:ls /etc true

go run main.go -name ls -value /etc -recursive

输出: ls /etc false

go run main.go -name ls -value /etc
Flag包相关的其他方法

flag.Set()解析后修改或设置命令行参数
package main

import (
"flag"
"fmt"
)

// 1. 声明保存命令行参数的变量
var (
name string
)

func init() {
// 2. 声明需要解析的命令行参: 参数名、默认值、参数说明
flag.StringVar(&name, "name", "none", "执行命令的名称")

// 将name的值修改为 find
flag.Set("name", "find")

}

func main() {
// 4. 主程序中通过全局变量引用命令行参
fmt.Println(name)
}

输出:find

go run main.go -name ls

posted @   奉禾  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示
主题色彩