GoLong的学习之路(十二)语法之标准库 flag的使用

上回书说到,fmt的标准库的一些常用的使用函数。这次说flag的使用,以下这些库要去做了解。不然GG,Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。

文章目录

  • os.Args
  • flag包
    • flag.Type()
    • flag.TypeVar()
    • flag.Parse()
    • flag其他函数

os.Args

如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。

这个方法我在看的时候,有些懵逼,什么叫做获取命令行的参数,仔细一琢磨,发现简单而言就是在DOS控制台中的输入的一些值。这些就叫做获取命令行的参数

os.Args是一个存储命令行参数的字符串切片,它的第一个元素是执行文件的名称。

package main
import ("fmt""os"
)
//os.Args demo
func main() {//os.Args是一个[]stringif len(os.Args) > 0 {for index, arg := range os.Args {fmt.Printf("args[%d]=%v\n", index, arg)}}
}

将上面的代码执行go build -o "args_demo"编译之后(其实就是不用idea编辑器,通过最原始的方式,进行编译)
在这里插入图片描述

flag包

flag包支持的命令行参数类型有bool、int、int64、uint、uint64、float float64、string、duration

flag.Type()

flag.Type(flag名, 默认值, 帮助信息)*Type

例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:

func main() {name := flag.String("name", "张三", "姓名")age := flag.Int("age", 18, "年龄")married := flag.Bool("married", false, "婚否")delay := flag.Duration("d", 0, "时间间隔")fmt.Println(*name)fmt.Println(*age)fmt.Println(*married)fmt.Println(*delay)fmt.Printf("%v", name)}

在这里插入图片描述

需要注意的是,此时name、age、married、delay均为对应类型的指针.

flag.TypeVar()

flag.TypeVar(Type指针, flag名, 默认值, 帮助信息)

例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:

var name string
var age int
var married bool
var delay time.Duration
flag.StringVar(&name, "name", "张三", "姓名")
flag.IntVar(&age, "age", 18, "年龄")
flag.BoolVar(&married, "married", false, "婚否")
flag.DurationVar(&delay, "d", 0, "时间间隔")

此时就将值输入到了对应的字段中,只不过对比以前的有点点不同而已

flag.Parse()

通过以上两种方法定义好命令行flag参数后,需要通过调用flag.Parse()来对命令行参数进行解析。

支持的命令行参数格式有以下几种:

  • -flag xxx (使用空格,一个-符号)
  • –flag xxx (使用空格,两个-符号)
  • -flag=xxx (使用等号,一个-符号)
  • –flag=xxx (使用等号,两个-符号)

其中,布尔类型的参数必须使用等号的方式指定。

Flag解析在第一个非flag参数(单个"-“不是flag参数)之前停止,或者在终止符”–“之后停止。

感兴趣的可以去DOS界面中尝试

flag其他函数

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

关于命令行参数的问题具体可以看:李文周的博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

douyin ios 8404六神参数学习记录

玩那么久安卓了,也终于换一换ios终端分析分析,还是熟悉的x-gorgon,x-argus,x-medusa那些参数。 随便抓个抖音 ios版本的接口: 像评论接口: https://api26-normal-hl.amemv.com/aweme/v2/comment/list/?…

锐捷ISG账号密码泄露漏洞

查看源代码,搜索password获取管理员账号密码: 之后,可以通过在线网站对该 MD5 值进行解密,并且我们发现这还是弱口令: 下面可以使用上一步查找到的账号和解密后的密码登录成功 文笔生疏,措辞浅薄&#x…

vue重修之Vuex【上部】

文章目录 版权声明Vuex 概述Vuex 的主要概念和组件 vuex的使用状态 (state)Vuex特点 访问vuex中数据$store访问mapState辅助函数访问 开启严格模式及Vuex的单项数据流突变(mutations)mutations初识带参 mutations辅助函数 mapMuta…

用超声波清洗机洗眼镜的有哪些?清洁力强的超声波清洗机不能错过

超声波清洗机在清洗眼镜方面表现出色,其强大的清洁能力可以彻底清除眼镜上的污垢和细菌。这种清洗方式被认为是一种高效且卫生的清洁方式,因为它利用高频振动和微射流打击力来清除污垢和细菌,而不是使用化学物质。对于那些长时间佩戴眼镜或者…

五、Qt中的常用类

1. QString 字符串类 QString是Qt中的字符串类,与C/C不同的是,不再使用ASCII编码,而使用Unicode编码。因此一个字符不是8位的char,而是16位的QChar,这就是为什么之前一个汉字占用一个字符的原因。、 QString几乎向前兼…

【Javascript】定时器

目录 延迟执行 定时执行 清除定时任务 延迟执行 setTimeout(function(){}, 毫秒) console.log(1); console.log(2); console.log(3); setTimeout(function (){console.log(5) },5000) console.log(4);setTimeout(function (){ console.log(5) },5000) 设定了一个任务&…

Proteus仿真--从左往右流水灯仿真(仿真文件+程序)

本文主要介绍基于51单片机的流水灯仿真(完整仿真源文件及代码见文末链接) 仿真运行视频 Proteus仿真--基于51单片机的流水灯仿真(从左往右) 附完整Proteus仿真资料代码资料 百度网盘链接: https://pan.baidu.com/s/1aZH13zwQkNB7…

Go基础——数组、切片、集合

目录 1、数组2、切片3、集合4、范围(range) 1、数组 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。 Go 语言数组声明需要指定元素类型及元素个数,与…

Mybatis的Mapper文件报错:Tag name expected

目录 一、Mapper文件的错误信息 二、原因分析 三、解决方案 1、解决方式一:CDATA 2、解决方式二:预定义字符 一、Mapper文件的错误信息 在使用MyBatis时,我们通常会写一些sql语句。如下图,有时候我们会直接使用比较符号&…

docker 中给命令起别名

docker 的有些命令特别复杂,我们可以给它设置别名简化输入,就不用每次都输入那么多了!!! 1. 进入 .bashrc 中修改配置( .bashrc 是root下的隐藏文件) cd /rootvim .bashrc2. 在 .bashrc 中加入…

LabVIEW开发TDS1000 和TDS2000 系列泰克示波器

LabVIEW开发TDS1000 和TDS2000 系列泰克示波器 泰克示波器是经常用到的工具,一般手动操作即可,但有时候也要集成到系统中,需要程控。这时候先要下载厂家提供的例子,了解LabVIEW的demo。根据不用的示波器型号,选择和计…

【Proteus仿真】【Arduino单片机】直流电机和步进电机

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用蜂鸣器、按键、直流电机、步进电机、ULN2003、L293D等。 主要功能: 系统运行后,K3键启动运行,K1和K2键控制…

MAC安装stable diffusion

./webui.sh --precision full --no-half-vae --disable-nan-check --api Command: "/Users/xxxx/aigc/stable-diffusion-webui/venv/bin/python3" -m pip install torch2.0.1 torchvision0.15.2 Error code: 2 执行命令: pip install torch2.0.1 torchvi…

【LeetCode力扣】189 53 轮转数组 | 最大子数组和

目录 1、189. 轮转数组 1.1、题目介绍 1.2、解题思路 2、53. 最大子数组和 2.1、题目介绍 2.2、解题思路 1、189. 轮转数组 1.1、题目介绍 原题链接:189. 轮转数组 - 力扣(LeetCode) ​ 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3输…

java原子类-Atomic

什么是原子类? java 1.5引进原子类,具体在java.util.concurrent.atomic包下,atomic包里面一共提供了13个类,分为4种类型,分别是: 原子更新基本类型,原子更新数组,原子更新引用&…

一次js请求一般情况下有哪些地方会有缓存处理

目录 前言 1. 浏览器缓存 1.1 强缓存 用法 代码 理解 1.2 协商缓存 用法 代码 理解 2. 服务端缓存 2.1 反向代理缓存 用法 代码 理解 2.2 应用层缓存 用法 代码 理解 3. CDN缓存 3.1 用法 3.2 理解 4. DNS缓存 4.1 用法 4.2 理解 5. AJAX请求缓存 5.…

【网络安全 --- 任意文件下载漏洞(1)】任意文件下载漏洞

一,环境,工具准备 1-1 VMVare 16 虚拟机及下载安装(资源) 请参考以下博客安装(特详细):【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)-CSDN博客【网络安…

Linux ln命令:建立链接文件

如果要想说清楚 ln 命令,则必须先解释下 ext 文件系统(Linux 文件系统)是如何工作的。我们在前面讲解了分区的格式化就是写入文件系统,而我们的 Linux 目前使用的是 ext4 文件系统。如果用一张示意图来描述 ext4 文件系统。 ext4 …

无需编程,小白也能建立个人网站

想要搭建一个属于自己的网站,但又不懂编程?别担心,现在有一个简单的方法可以帮助你轻松实现这个愿望。只需要几个简单的步骤,就可以让小白也能搭建出一个漂亮的网站。 首先,登录乔拓云账号,点击网站搭建进入…

2-多媒体数据压缩国际标准

文章目录 多媒体数据压缩编码的重要性和分类为什么要压缩?计算: 未压缩音频的数据率简答: 环绕声系统-作业题9(简述7.4.3全景声)计算: 未压缩图像的数据量-作业题10(估计尺寸及容量)计算: 未压缩视频的数据率 为什么能压缩?数据压缩编码的两大类无损压缩算法: LZ77-作业题6-(…