go_命令行参数Args、flag

2023-10-29

Args:

os.Args是一个string的切片,可以存储所有的命令行参数(在终端运行才行)

func main() {
	args := os.Args
	for i, v := range args {
		fmt.Println("索引:", i, "\t数据:", v)
	}
	// 既然是切片,那就可以截取
	fmt.Println("索引0:", args[0])
}

在终端使用命令执行.go文件,第1个参数是可执行文件本身,后面的是启动可执行文件后传入的参数

itzhuzhu@itzhuzhu-MacBook-Pro ~ % go run /Users/itzhuzhu/Desktop/goCode/study/main/main.go 我会被打印出来吗   空格喽
索引: 0 	数据: /var/folders/v7/f9_4jhds6vs03f0mh2j5zhbh0000gn/T/go-build2830246341/b001/exe/main
索引: 1 	数据: 我会被打印出来吗
索引: 2 	数据: 空格喽
索引0: /var/folders/v7/f9_4jhds6vs03f0mh2j5zhbh0000gn/T/go-build2830246341/b001/exe/main

上传文件小案例

func main() {
	args := os.Args

	// 因为规定了上传文件需要携带至少一个的文件路径,所以需要在这里判断一下上传的文件数是否满足格式
	if len(args) != 2 {
		return
	}

	//提取文件名
	path := args[1]
	// os.Stat:可以获取文件属性
	stat, err := os.Stat(path)
	if err != nil {
		fmt.Println("os.Stat 出错了:", err)
		return
	}
	fmt.Println("文件名:", stat.Name())
	fmt.Println("文件大小:", stat.Size(),"字节")
}

输出:

itzhuzhu@itzhuzhu-MacBook-Pro ~ % go run /Users/itzhuzhu/Desktop/goCode/study/main/main.go /Users/itzhuzhu/Desktop/笔记/test.txt
文件名: test.txt
文件大小: 37 字节

flag:

flag包实现了命令行解析,使用Args拿到命令行参数如果不是按照顺序写的就会有问题,可以使用flag解析,指定名称然后带参数,类似于mysql登录的时候写-u -p一样

  • flag.Args():返回命令行参数后的其他参数,以[]string类型
  • flag.NArg():返回命令行参数后的其他参数个数
  • flag.NFlag():返回使用的命令行参数个数

命令行参数的格式

-参数名 参数值
-参数名=参数值
-参数名:参数值

flag.TypeVar():定义一个指定类型的命令行参数

func StringVar(p *string, name string, value string, usage string) {
	CommandLine.Var(newStringValue(value, p), name, usage)
}

P:指向变量的指针,用来存储命令行参数的值
name:命令行参数的名称,例如"-name"
value:命令行参数的默认值,如果没有传入该参数,则使用默认值
usage:命令行参数的说明,例如"-name是您的用户名"

演示:

func main() {
	var user string
	var password string

	flag.StringVar(&user, "u", "", "请输入用户名")
	flag.StringVar(&password, "p", "", "请输入密码")

	// flag.Parse():解析命令行参数
	flag.Parse()
	fmt.Println("user:", user)
	fmt.Println("password:", password)
}

输出:

itzhuzhu@itzhuzhu-MacBook-Pro main % go run main.go -u itzhuzhu -p itzhuzhu
user: itzhuzhu
password: itzhuzhu

如果直接执行程序不输入字段和值,会打印出所有字段的默认值

itzhuzhu@itzhuzhu-MacBook-Pro main % go run main.go          
user: 
password: 

输入非指定的命令,会显示所字段的自定义提示

itzhuzhu@itzhuzhu-MacBook-Pro main % go run main.go -abc haha
flag provided but not defined: -abc
Usage of /var/folders/v7/f9_4jhds6vs03f0mh2j5zhbh0000gn/T/go-build547939883/b001/exe/main:
  -p string
    	请输入密码
  -u string
    	请输入用户名
exit status 2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go_命令行参数Args、flag 的相关文章

随机推荐

  • Java基础-对象的内存分配与初始化(一定要明白的干货)

    参考 https www cnblogs com wxw7blog p 7349204 html 首先 什么是类的加载 类的加载由类加载器执行 该步骤将查找字节码 classpath指定目录 并从这些字节码中创建一个Class对象 Java
  • 3 css

    定位 为什么需要定位 1 某个元素可以自由的在一个盒子内移动位置 并且压住其他盒子 2 定位可以在让盒子自由在某个盒子内移动位置或者固定屏幕中某个位置 并且可以压住其他盒子 定位组成 将盒子定在某一位置 也就是来摆盒子 定位 定位模式 边偏
  • 如何将typora直接导入CSDN博客

    1 打开首页 2 点击头像 打开内容管理 3 点击左上角的发布中的文章4 点击工具栏中的导入5 找到之前用typora软件写的 保存在电脑的 md文件 6 打开就出现下面的预览页面 7 需要再编辑 点击右上角一个笔的图标 出现下面的编辑页面
  • 普罗米修斯搭建过程中遇到的坑

    1 使用后台命令启动不起来 换成使用前台命令启动 报错如下 2 err error loading config from root prometheus prometheus 2 17 0 prometheus yml couldn t
  • 运动目标检测、阴影检测及目标跟踪中用得到的标准测试视频下载(大量IBM提供视频)

    在搜测试视频时 找到andrew31在ilovematlab论坛中分享的网址链接 我转载于此 并做出详细介绍 方便大家以后使用 1 PETS2001的测试视频 http www filewatcher com b ftp ftp cs rd
  • postgreSQL12 主从

    Centos7 安装 postgreSQL 1 基础环境 2 部署主从 2 1 安装postgreSQL 2 2 主节点 2 3 从节点 3 验证主从 1 基础环境 操作系统 CentOS 7 7 PostgreSQL 12 1 主节点 1
  • mysql数据库备份类文件

  • 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

    1 内联接 典型的联接运算 使用像 或 lt gt 之类的比较运算符 包括相等联接和自然联接 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行 例如 检索 students和courses表中学生标识号相同的所有行 2 外联接 外
  • MTK 底层耳机中断上报流程

    文章目录 前言 框架 硬件 背景知识 线控耳机原理图 检测电路解释 正文开始 软件 Linux 驱动代码流程 Android 前言 更新 加量不加价 框架 硬件 背景知识 国标耳机插头信号定义 lt lt lt 左声道 右声道 麦克 地 美
  • 【css

    linear gradient CSS函数创建一个由两种或多种颜色沿一条直线进行线性过渡的图像 其结果是
  • 初学React,做一个简易的滚动加载

    想做一个简单的滚动鼠标加载更多商品的功能 虽然有相关插件更方便 不过想手写一个简易版的 我把这个板块放在最下方 再下面就是一个小小的底部导航了 所以就判断滚动到页面底部就行 判断滚动到底部需要知道3个值 滚动的高度 可视区域的高度 滚动条内
  • 概率图模型&概率模型 及其应用

    文章目录 概率图模型 有向 vs 无向 概率模型 参数估计 隐变量估计 变分推断 应用例子1 BM RBM 应用示例2 概率图模型中网络结构估计 概率图模型 有向 vs 无向 概率图模型用图刻画一组随机变量之间的相关关系 有向 无环 图刻画
  • STM32移植mbedtls实现AES加解密

    前言 在实际的物联网项目开发中 经常需要将设备采集到的数据远程传输到服务器端 设备也会接收远程服务器端下发过来的数据 这便是数据交互 如果这些数据只是通过明文方式 进行交互 那么是不安全的 那么就需要将数据进行加密和解密了 本文讲基于mbe
  • GLSurfaceView 的onDrawFrame()频繁调用

    可用GlSurfaceView setRenderMode GLSurfaceView RENDERMODE WHEN DIRTY 和 GlSurfaceView setRenderMode GLSurfaceView RENDERMODE
  • Netty UDP 使用采坑

    使用Netty搭建UDP服务收集日志 使用过程中发现 部分日志接收不到 排查发现 都是大日志记录不到 后查询相关文档进行如下修改 EventLoopGroup workerGroup new NioEventLoopGroup 20 try
  • 创建随机点使用支持向量机进行分类(Arcgis+Envi)

    独自摸索是比较痛苦的 每周末两天才能碰巧挖出一个点 希望这篇文章能对你有所帮助 话不多说直接进入正题 首先在arcgis中导入图片 可能遇到此类情况 解决办法如下 双击图片 symbology RGB三通道选择波带 stretch选择拉伸方
  • Java自带排序函数sort()的使用方法

    import java util Arrays class Solution public int sortedSquares int nums int nums1 new int nums length for int i 0 i lt
  • git命令创建,合并,删除分支代码

    创建分支 1 git branch test 创建一个test的分支 2 git checkout test 切换到test分支 3 git add 4 git commit m 提交代码的说明 5 git remote add origi
  • 645.错误的集合(力扣leetcode) 博主可答疑该问题

    一 笔记部分 思路 1 可以用排序 先排序后连续两个相同 还有那个位置上缺了就是那个 2 转化为负数 先遍历一次先将每个元素所对应位置的树转化为负数 然后再遍历一次看那个是负数 就是出现了两次 再看索引的数字是否为负数 因为出现了的都是为负
  • go_命令行参数Args、flag

    Args os Args是一个string的切片 可以存储所有的命令行参数 在终端运行才行 func main args os Args for i v range args fmt Println 索引 i t数据 v 既然是切片 那就可