[每周一更]-(第80期):分析源码flag,配合示例展示用法

在这里插入图片描述

Go 语言标准库中的 flag 包提供了一套简单而又强大的命令行参数解析工具。以下是对 flag 包源码的一些关键点的解析:

FlagSet 结构体:

FlagSet 是 flag 包的核心结构体,用于表示一组命令行参数。它包含了一个存储命令行参数的 map,其中键是参数名,值是指向参数值的指针。FlagSet 结构体的定义如下:

type FlagSet struct {
// ...
}

Flag 接口:

Flag 接口定义了一个通用的命令行参数的接口。所有实现了 Flag 接口的类型都可以用于定义命令行参数。接口定义如下:

type Flag interface {Name() stringUsage() stringValue() string// ...
}

Var 函数:

Var 函数用于将一个 Flag 类型的变量与一个命令行参数绑定。这样,在解析命令行参数时,相应的值将被存储到这个变量中。

func (f *FlagSet) Var(value Flag, name string, usage string)

内建的 Flag 类型:

flag 包提供了一些内建的 Flag 类型,如 BoolVar、IntVar、StringVar 等,它们实现了 Flag 接口。这些函数用于创建对应类型的命令行参数。

func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string)
func (f *FlagSet) IntVar(p *int, name string, value int, usage string)
func (f *FlagSet) StringVar(p *string, name string, value string, usage string)

命令行参数的解析:

FlagSet 结构体的 Parse 方法用于解析命令行参数。该方法会从 os.Args[1:] 中提取参数,识别出参数名和参数值,并将对应的值存储到相应的变量中。

func (f *FlagSet) Parse(arguments []string) error

其他方法:

PrintDefaults 方法用于打印命令行参数的默认值。
Usage 方法用于打印命令行参数的使用说明。
示例:

以下是一个简单的示例,演示了如何使用 flag 包定义和解析命令行参数:

package mainimport ("flag""fmt"
)func main() {// 定义命令行参数var name stringvar age intflag.StringVar(&name, "name", "", "Specify a name")flag.IntVar(&age, "age", 0, "Specify an age")// 改变默认的 Usageflag.Usage = usage// 解析命令行参数flag.Parse()// 使用命令行参数的值fmt.Printf("Name: %s\n", name)fmt.Printf("Age: %d\n", age)
}func usage() {fmt.Println("***********************************************************************************")_, err := fmt.Fprintf(os.Stderr, `使用操作说明:TODO 按需求说明参数说明:`)if err != nil {fmt.Println(err)}flag.PrintDefaults()
}

这只是 flag 包的一小部分,如果你希望深入学习,建议查看 flag 包的完整源码。源码位于 Go 的标准库中的 flag 包。你可以在 Go 的 GitHub 仓库中找到源码:https://github.com/golang/go/tree/master/src/flag。

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

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

相关文章

酷开科技 | 酷开系统9.2,开启个性化时代

现代人,总喜欢不走寻常路,以彰显自己的不同。酷开系统的个性化推荐就能满足你的这类需求,既能给你想要的内容,又能给你与众不同的体验! 想听音乐了?打开酷开系统音乐频道,随机播放为你推荐的歌曲…

springboot devtools实现热部署

1.配置devtools依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency>2.配置maven插件&…

【四】CocosCreator-修改引擎源码

看源码的过程中&#xff0c;少不了得修修改改源码&#xff0c;做点实验。果断去找找源码在哪里&#xff0c;然后就可以快乐动手改源码了。 CocosCreator引擎源码主要就是js和原生C两类&#xff0c;分别在引擎目录的resources/engine和resources/cocos2d-x下&#xff0c;如图&am…

WEB 3D技术 three.js 法向量演示性讲解

本文 我们来说法向 法向 又叫 法向量 就是 我们一个三维物体 顶点垂直于面 的方向 向量 他的作用 用来做光反射 根据光照的方向 根据面进行反射 我们上文写的这个代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from "…

R语言频率分布直方图绘制教程

本篇笔记分享R语言绘制直方图的方法&#xff0c;通过多种展示风格对数据进行可视化&#xff0c;主要用到ggplot、ggpubr等包。 什么是直方图&#xff1f; 直方图(Histogram)&#xff0c;又称质量分布图&#xff0c;是一种统计报告图&#xff0c;由一系列高度不等的柱子表示数据…

【Java集合类篇】HashMap的数据结构是怎样的?

HashMap的数据结构是怎样的? ✔️HashMap的数据结构✔️ 数组✔️ 链表 ✔️HashMap的数据结构 在Java中&#xff0c;保存数据有两种比较简单的数据结构: 数组和链表&#xff08;或红黑树&#xff09;。 HashMap是 Java 中常用的数据结构&#xff0c;它实现了 Map 接口。Has…

STM32 CubeMX产生的程序架构

使用STM32CubeMX产生启动相关代码&#xff0c;配置各种外设。在后续程序开发过程中&#xff0c;有可能使用STM32CubeMX逐步产生使用的代码&#xff0c;为了将其产生的代码和我们程序隔离&#xff0c;一种可行的程序架构如下&#xff1a; 在此架构中&#xff0c;STM32CubeMX产生…

GraphQL和REST API的区别

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 GraphQL&#xff08;Graph Query Language&#xff09;和REST&#xff08;Representational State Transfer&#xff09;是两种用于构建和设计API的不同方法。以下…

电脑屏幕一直闪烁怎么解决?三大妙招还你清晰视野

电脑屏幕闪烁一直是困扰用户的一个问题&#xff0c;它会影响到用户的使用体验&#xff0c;甚至可能导致眼睛疲劳和头痛。可是电脑屏幕一直闪烁怎么解决呢&#xff1f;在本文中&#xff0c;我们将介绍三个解决电脑屏幕闪烁的方法&#xff0c;从简单的软件调整到硬件检测&#xf…

亚马逊图片上传后变模糊怎么办?亚马逊图片优化指南—站斧浏览器

亚马逊图片上传后变模糊怎么办&#xff1f; 使用高分辨率图片&#xff1a;亚马逊建议卖家使用至少1000 x 1000像素的高分辨率图片。如果您上传的图片分辨率较低&#xff0c;亚马逊系统可能会将其自动调整为较小的尺寸&#xff0c;导致图片模糊。因此&#xff0c;确保您使用高质…

基于Java SSM框架实现宠物管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现宠物管理系统演示 摘要 随着我国经济的快速发展&#xff0c;人民生活水平的不断提高&#xff0c;宠物逐渐成为许多宠物爱好者的一种生活方式。 宠物的品种也越来越多样化&#xff0c;宠物不仅能给生活带来乐趣还可以成为空巢老人&#xff0c;独生子女很…

MongoDB批量写入操作

一、概述 MongoDB为客户端提供了批量执行写入操作的能力。批量写入操作影响单个集合。MongoDB允许应用程序确定批量写入操作所需的可接受确认级别。 db.collection.bulkWrite&#xff08;&#xff09;方法提供了执行批量插入、更新和删除操作的能力。 MongoDB还支持通过db.col…

补码的乘法-布斯乘法

前言 本篇文章讲解如何通过逻辑门的形式来实现补码的乘法操作 布斯乘法 A.D.Booth提出了一种补码相乘算法,可以将符号位与数值位合在一起参与运算&#xff0c;直接得出用补码表示的乘积&#xff0c;且正数和负数同等对待。这种算法被称之为Booth (布斯)乘法 下面有两个变量值…

【量化金融】《证券投资学》吴晓求(第四版)(更新中)

这里写目录标题 第一篇 基本知识第1章 证券投资工具名词解释简答题 第2章 证券市场名词解释简答题 第二篇 基本分析第三篇 技术分析第四篇 组合管理第五篇 量化分析与交易策略 第一篇 基本知识 第1章 证券投资工具 名词解释 风险&#xff08;risk&#xff09; 未来结果的不…

【hcie-cloud】【16】业务上云迁移、Rainbow详述

文章目录 前言华为业务迁移解决方案概述业务上云背景概述业务迁移场景需求及挑战业务迁移的价值华为业务迁移解决方案 - 全景图华为业务迁移解决方案的优势 Rainbow迁移工具介绍Rainbow迁移原理介绍Rainbow迁移工具简介Rainbow迁移工具定位Rainbow迁移视图Rainbow迁移原理 - Wi…

JumpServer3.0版本-账号管理

账号列表 我这里已经创建好了所以有很多,可以点击资产树列表分类查看 点击创建按钮,添加账号 资产:如果多个设备的账号密码一致可以在资产同事选中 名称:方便辨识即可 用户名:登录设备的账户名 密码:按你登录需求自行选择 添加按钮旁边还有个“模版添加” 此功能便…

yolov8实战第五天——yolov8+ffmpg实时视频流检测并进行实时推流——(推流,保姆教学)

yolov8实战第一天——yolov8部署并训练自己的数据集&#xff08;保姆式教程&#xff09;_yolov8训练自己的数据集-CSDN博客 yolov8实战第三天——yolov8TensorRT部署&#xff08;python推理&#xff09;&#xff08;保姆教学&#xff09;-CSDN博客 今天&#xff0c;我们继续y…

Java TBA访问NetSuite Restlet时的403错误

本周有同学问为啥Java访问NetSuite Restlet时&#xff0c;按照知识会之前的文章分享&#xff0c;会一直报403 INVALID_LOGIN_ATTEMPT错误。 https://nk-community.blog.csdn.net/article/details/131399801https://nk-community.blog.csdn.net/article/details/131399801原因是…

线程同步之:QReadWriteLock

1、 使用互斥量QMutex时候存在一个问题 每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程“读”取某个变量&#xff0c;使用互斥量时也必须排队&#xff01; 然而&#xff0c;实际情况是允许&#xff1a;让多个线程同时“读”&#xff01; 这样互斥量 就会降…

面试官:说说flexbox(弹性盒flex布局),以及适用场景?

面试官&#xff1a;说说flexbox&#xff08;弹性盒布局模型&#xff09;,以及适用场景&#xff1f; 一、是什么 Flexible Box 简称 flex&#xff0c;意为”弹性布局”&#xff0c;可以简便、完整、响应式地实现各种页面布局 采用Flex布局的元素&#xff0c;称为flex容器conta…