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 的相关文章

  • 在 Go 中使用互斥锁

    我想了解互斥体是如何工作的 据我目前的理解 它是为了进行原子操作并同步对某些数据的访问 我在这里构建了一个队列数据结构的示例 https github com arnauddri algorithms blob master data st
  • 我想在后端验证来自 golang 前端的时区

    前端在注册期间发送时区以及其他用户详细信息 我需要在时区上放置一个验证器来进行 api 测试 时区数据的格式为 GMT 10 00 Hawaii GMT 08 00 Pacific Time US amp Canada 我所做的是定义数组中
  • Go中如何自定义http.Client或http.Transport超时重试?

    我想实现一个自定义http Transport对于标准http Client 如果客户端超时 它将自动重试 附 由于某种原因 习俗http Transport is a 一定有 我已经查过了hashcorp go retryablehttp
  • Go io.Pipe 的缓冲版本

    有缓冲版本吗io Pipe https golang org pkg io Pipe 在标准库或第三方库中 在我推出自己的库之前 上下文 我正在尝试使用这个解决方案 https stackoverflow com a 36229262 15
  • 如何分析 VSCode 中函数的性能

    我用 C Golang 编写了一个程序 如何找到占用最高 CPU 周期的函数 目的是提高正在执行的程序的性能 2021 年 10 月 金香儿哈娜 https github com hyangah宣布 tweet https twitter
  • 如何在特定文件夹中运行 shell 命令

    我可以用这个out err exec Command git log Output 获取将在与可执行位置相同的路径中运行的命令的输出 如何指定要在哪个文件夹中运行命令 exec Command https golang org pkg os
  • 如何将UTC时间转换为unix时间戳

    我正在寻找将 UTC 时间字符串转换为 unix 时间戳的选项 我的字符串变量是02 28 2016 10 03 46 PM并且需要将其转换为 unix 时间戳 例如1456693426 知道该怎么做吗 首先 unix时间戳14566934
  • go中有memset的类似物吗?

    在 C 中 我可以使用某些值初始化数组memset https msdn microsoft com en us library aa246471 28v vs 60 29 aspx const int MAX 1000000 int is
  • 如何将 SQLite 数据库捆绑到 Go 二进制文件中?

    我尝试使用 go bindata 和 packr 但这些包没有显示如何将 SQLite 数据库文件打包到二进制文件中 我不需要以任何方式更新数据库 我只想在启动时从中读取数据 如何将 SQLite 数据库文件嵌入到 Go 二进制文件中 SQ
  • “go.tools”的权限被拒绝错误

    当我尝试安装 go 工具时 我的权限被拒绝 usr local go pkg tool linux amd64 cover 我可以接受 因为它是 usr local 目录及需求root使用权 但我的第一个疑问是为什么当我设置时它试图安装在这
  • Golang 正则表达式在字符串之间替换

    我有一些可能采用以下形式的字符串 MYSTRING MYSTRING n MYSTRING n MYSTRING randomstringwithvariablelength n 我希望能够将其正则表达式为MYSTRING foo 基本上替
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • 如何关闭 gorm 1.20.0 中的数据库实例

    由于我没有在 Close 函数中找到 gorm 实例 任何帮助将不胜感激 dbURI fmt Sprintf user s password s dbname s port s sslmode s TimeZone s username p
  • 如何从 JWT 令牌中提取声明

    我正在使用 dgrijalva jwt go 包 我想从令牌中提取有效负载 但找不到方法 示例 取自 https jwt io https jwt io 对于编码 eyJhbGciOiJIUZI1NiIsInR5cCI6IkpXVCJ9 e
  • RSA OAEP、Golang 加密、Java 解密 -BadPaddingException:解密错误

    我正在尝试解密使用 RSA OAEP 在 Golang 中加密的字符串 但出现 BadPaddingException 解密错误 很难弄清楚我错过了什么 这是Golang加密方法 func encryptString rootPEM io
  • 如何读取大型平面文件

    我有一个平面文件 其中包含 339276 行文本 大小为 62 1 MB 我试图读入所有行 根据我所拥有的某些条件解析它们 然后将它们插入数据库 我最初尝试使用 bufio Scan 循环和 bufio Text 来获取该行 但缓冲区空间不
  • 解压文件的简单方法

    有没有一种简单的方法可以用 Go 解压文件 现在我的代码是 func Unzip src dest string error r err zip OpenReader src if err nil return err defer r Cl
  • Golang 中的确定性 RSA 加密 - 如何在多次加密下为给定消息获得相同的结果

    对于下面的RSA加密代码 每次对同一条消息进行加密时 结果都会不同 我发现这是由于rand Reader in the rsa EncryptOAEP功能使其更加安全doc https pkg go dev crypto rsa Encry
  • 如何将所有GET请求查询参数放入Go中的结构体中?

    你好 我想将 get 查询参数转换为 Go 中的结构 例如我有这样的结构 type Filter struct Offset int64 json offset Limit int64 json limit SortBy string js
  • 单值上下文中的多值错误

    我在编译 GO 代码时遇到此错误 multiple value fmt Println in single value context 我正在尝试创建一个函数 该函数接受可变数量的整数并将每个变量打印在一行上 GO package main

随机推荐

  • 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 既然是切片 那就可