Go语言----flag包(导入、配置、以及常用方法Parse()、Parsed()、NArg())

news2024/11/28 8:23:50

在 Go语言中有很多种方法来处理命令行参数。如果我们只是想简单的获取命令行的参数,可以像Go语言–延迟调用defer、获取命令行参数、局部变量以及全局变量中介绍的不使用任何库,直接使用 os.Args;
在这里插入图片描述d但是 Golang 的标准库提供了 flag 包来处理命令行参数。

导入包

import flag

flag参数类型

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

flag参数有效值
字符串flag合法字符串
整数flag1234、0664、0x1234等类型,也可以是负数。
浮点数flag合法浮点数
bool类型flag1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False。
时间段flag可以接受任何可以被time.ParseDuration转换的参数

配置flag

func XXX(name string, value xxx, usage string) *xxx
func XXXVar(p *xxx, name string, value xxx, usage string)
  • XXX为各个类型名,有:bool、duration、float64、int64、int、uint、uint64、string等.
  • name string为flag名—name区分大小写
  • value xxx为默认值
  • usage string为帮助信息
  • p *xxx为Type指针

即如下内容:

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

两者区别

  • 前者直接返回指向对应类型指针并分配对应指针指向的对象,可以直接通过解引用来获取转换后的对应值
  • 后者需要指定指针指向的对象.

例如

定义姓名、年龄、婚否三个命令行参数:

name := flag.String("name", "张三", "姓名")
age := flag.Int("age", 18, "年龄")
married := flag.Bool("married", false, "婚否")
delay := flag.Duration("d", 0, "时间间隔")

此时name、age、married、delay均为对应类型的指针。

或者:

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()–设置完各种配置后调用此方法

用来实际触发转换的。底层实际上就是转换了命令行从第二个开始的所有参数。

  • 如果有转换失败的情况,则会直接导致程序退出,并像标准输出打印错误原因。
  • 如果输入的是-help或-h,且没有直接配置,则会输出使用帮助。

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

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

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

Parsed()–调用过Parse()进行转换后,Parsed()返回true,否则返回false

Args

处理完flag后,后面的参数都会当作普通参数处理。

  • 可NArg()查看普通参数的个数;
  • func Arg(i int) string来访问其中某个参数。
for i := 0; i < flag.NArg(); i++ {
		fmt.Printf("%d:%s\n", i, flag.Arg(i))
	}
  • func Args() []string来一次性取回所有的参数。
for i, arg := range flag.Args() {
	fmt.Printf("%d:%s\n", i, arg)
}

实例

package main

import (
	"flag"
	"fmt"
	"time"
)

func main() {
	//定义命令行参数方式1
	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()
	fmt.Println(name, age, married, delay)
	//返回命令行参数后的其他参数
	fmt.Println(flag.Args())
	//返回命令行参数后的其他参数个数
	fmt.Println(flag.NArg())

	//访问其中某个参数
	for i, arg := range flag.Args() {
		fmt.Printf("%d:%s\n", i, arg)
	}

	//返回使用的命令行参数个数
	fmt.Println(flag.NFlag())
}

在这里插入图片描述

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

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

相关文章

机械拆装-基于Unity-本地数据持久化

目录 1. 数据结构简介&#xff1a;数据的集合 1.1 线性数据结构 1.2 非线性数据结构 2. 对数据集合的操作&#xff1a; 3. 数据持久化 3.1 数据的序列化存储 3.2 JSON文件硬盘存储 3.2.1 Json文件允许存储的数据类型 3.2.2 Json文件的语法格式 3.2.3 Json文件的读取 3.2.4 …

Echarts toolbox相关配置 dataZoom缩放

前言:最近开发遇到一个echarts相关问题,需要实现用户鼠标滚动实现图表缩放,或者实现选中某一段区域进行缩放,放大效果; 1.第一个需求就是区域缩放按钮要隐藏掉,用户鼠标放在图表内就默认实现选择效果,并且区域缩放还原按钮不能隐藏,需要在初始化配置这三个属性. // 假设你已经…

孙宇晨建议中国重新考虑“比特币政策”!中美竞争将使加密货币行业受益?美国对“中国崛起”感到焦虑!

近日&#xff0c;前美国总统特朗普发表了一番振奋人心的比特币演讲&#xff0c;令加密货币社群反响热烈。而Tron区块链创始人孙宇晨则建议中国重新考虑其对于比特币的政策立场&#xff0c;并指出中美两国在加密货币领域的竞争&#xff0c;将使整个行业受益。这再次引发了人们对…

未来社交:Facebook如何定义虚拟现实的新时代?

随着科技的飞速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;逐渐从科幻小说中的幻想变成了现实生活中的前沿技术。在这一领域&#xff0c;Facebook&#xff08;现已更名为Meta&#xff09;扮演了重要角色&#xff0c;通过不断的创新和投资&#xff0c;致力于打造一个全…

花几千上万学习Java,真没必要!(三十六)

1、File类&#xff1a; 测试代码1&#xff1a; package filetest.com; import java.io.File; import java.io.IOException; public class FileOperations { public static void main(String[] args) { // 创建新文件File file new File("example.txt"); tr…

18966 两两配对差值最小

这个问题可以通过排序和配对来解决。首先&#xff0c;我们将数组排序&#xff0c;然后我们将数组的第一个元素和最后一个元素配对&#xff0c;第二个元素和倒数第二个元素配对&#xff0c;以此类推。这样&#xff0c;我们可以得到n/2个和&#xff0c;然后我们找出这些和中的最大…

光伏可行性研究报告能否自动生成?

随着技术的不断进步和应用的广泛普及&#xff0c;光伏项目的规划与实施也面临着更加复杂多变的考量因素&#xff0c;其中&#xff0c;光伏可行性研究报告成为了项目前期不可或缺的重要内容。那么&#xff0c;面对这一需求&#xff0c;光伏可行性研究报告能否实现自动生成呢&…

Nat Med·UNI:开启计算病理学新篇章的自监督基础模型|顶刊精析·24-07-31

小罗碎碎念 本期推文主题 这一期推文是病理AI基础模型UNI的详细介绍&#xff0c;原文如下。下期推文会介绍如何使用这个模型&#xff0c;为了你能看懂下期的推文&#xff0c;强烈建议你好好看看今天这期推文。 看完这篇推文以后&#xff0c;你大概就能清楚这个模型对自己的数据…

搞懂数据结构与Java实现

文章链接&#xff1a;搞懂数据结构与Java实现 (qq.com) 代码链接&#xff1a; Java实现数组模拟循环队列代码 (qq.com) Java实现数组模拟栈代码 (qq.com) Java实现链表代码 (qq.com) Java实现哈希表代码 (qq.com) Java实现二叉树代码 (qq.com) Java实现图代码 (qq.com)

《计算机网络》(第8版)考研真题

第一章 一、选择题 1 在 TCP/IP 体系结构中,直接为 ICMP 提供服务的协议是( )。[2012 年统考] A .PPP B .IP C .UDP D .TCP 【答案】B 【解析】A 项:PPP 在 TCP/IP 体系结构中属于网络接口层协议(在 ISO/OSI 体系结构中属于数据链路层协议),所以 PPP 为网络层提供…

免费【2024】springboot 厨房达人美食分享平台

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

图片格式转换教程:百种格式随意转换,建议收藏使用!

图片格式转换方法有哪些&#xff1f;本文整理了几款好用且简单的格式转换工具&#xff0c;适用于处理各种图片格式转换的难题。 常见的图片格式转换有png转换为jpg、heic转jpg、webp转jpg等&#xff0c;特别是heic、webp、这两种图片格式&#xff0c;格式比较特殊&#xff0c;兼…

《最新出炉》系列入门篇-Python+Playwright自动化测试-57- 上传文件 - 番外篇

软件测试微信群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 前边的三篇文章基本上对文件上传的知识介绍和讲解的差不多了&#xff0c;今天主要是来分享宏哥在文件上传的实际操作中发现的一个问题&#xff1a;input控件和非input控件的上…

打破技术壁垒,加速企业数字化转型:低代码平台如何降低开发门槛

科技飞速发展&#xff0c;企业数字化转型趋势不可逆转。数字化转型不仅能够优化内部运营流程&#xff0c;提升管理效率&#xff0c;还能通过数据驱动决策&#xff0c;增强市场竞争力。传统开发模式因技术门槛、周期长&#xff0c;限制了企业创新与响应速度。 低代码平台应运而生…

Android进阶之NDK开发,保姆级教程

目录 前言NDK下载CMake文件创建指定ABI架构编写CMake文件编写JNI方法Java调用CC调用Java 生成JNI头文件实现对应C方法编译so文件编写demo验证运行效果总结 前言 作为Android应用开发从业者来说&#xff0c;掌握NDK开发是必备技能之一&#xff0c;本文将从NDK环境下载&#xff…

Spring源码-xml配置文件如何加载解析默认标签变为BeanDefinition

1.创建Environment new StandardEnvironment() createEnvironment:346, AbstractApplicationContext (org.springframework.context.support) getEnvironment:332, AbstractApplicationContext (org.springframework.context.support) resolvePath:131, AbstractRefreshable…

通俗易懂理解提示词工程、RAG和微调

在当今的人工智能领域&#xff0c;提示工程、RAG&#xff08;检索增强生成&#xff09;和微调是三个重要的概念。本文将通过简单易懂的方式&#xff0c;帮助大家理解这三者之间的关系和应用。 大模型的训练过程 &#x1f4ca; 在当今的人工智能领域&#xff0c;大模型的训练是…

如何使用 Flask 或 Django 创建 Web 应用

Flask和Django是Python中最受欢迎的两个Web框架&#xff0c;它们各有优点&#xff0c;适用于不同的应用场景。 一、使用Flask创建Web应用 1.1 Flask简介 Flask是一个轻量级的Web框架&#xff0c;以其简洁、易用和灵活著称。它遵循“微框架”的设计理念&#xff0c;只提供核心…

批量输出文件夹内所有文件名和文件——vba实现

导出一个文件夹下所有文件名&#xff0c;可用vba插件实现&#xff0c;如图 如下图&#xff0c;已在桌面生成一个txt文本&#xff0c;但此方法只可输出一级目录下的文件&#xff0c;若输出所有文件&#xff0c;则需修改插件代码 &#xff08;若想导出硬盘下所有文件和文件夹&…

Windows10+VS2019编译Faiss

先放上我编译好的静态库&#xff0c;要配合OpenBLAS使用 通过百度网盘分享的文件&#xff1a;3rdparty.zip 链接&#xff1a;https://pan.baidu.com/s/1yPys-CX_EdmnJzj66g_KlQ?pwdh6ff 提取码&#xff1a;h6ff –来自百度网盘超级会员V1的分享 1.源码下载 首先下载Faiss地…