flag 包解析命令行参数 | 学习笔记

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 快速学习 flag 包解析命令行参数

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程flag 包解析命令行参数】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/626/detail/9735


flag 包解析命令行参数

一、flag 包用来解析命令行参数

说明:前面的方式是比较原生的方式,对解析参数不是特别的方便,特别是带有指定参数形式的命令行。

比如:cmd>main.exe -fci/aaa.txt -p 200 -u root 这样的形式命令行,go 设计者给我们提供了 flag 包,可以方便的解析命令行参数,而且参数顺序可以随意请编写一段代码,可以获取命令行各个参数,

D:woproject\src vo_code>test.exe -u root -pud root -h 192.168.8.1 _port 3306

User = root

Pwd = root

Host = 192.168.0.1

用这 os.Args这个切片来获取参数的缺点是必须严格按照一定顺序进行。在实际的开发中  Mexico  或者其他的数据库MYSQL 在登录的时候,它往往是这样写的

D:\goproject src\o-code`hapter14\argsdemo>mysql -u roo

1 12345 -h localhost -P 3306在很多这个程序里面常用这种用法,前面是一个应用程序后边儿用一个 - 来指定参数简而言之,用前面有个指定参数的一个标识,后面数值才是这个参数的值指定参数的优点就是顺序就不受约束,-u root可以写在前面,也可以写到后面 flag 包来解析命令行参数,举例说明前面的方式,它是比较原生态的。对解析参数,不是特别方便,特别是带有指定参数形式的命令行比如:D:woproject\src vo_code>test.exe -u root -pud root -h 192.168.8.1 _port 3306, 要求通过这个指定的参数,来获取到需要的参数值,通过这个指令参数来拿到后面真正的参数值,这种用法好处参数顺序可以随意可以支持根据指定参数来获取参数值。

案例:

package main

import (

"fmt"

"flag”

func main()f

//定义几个变量,用于接收命令行的参数值

var user string

var pud string

var host string

var port int

//&user 就是接收用户命令行中输入的-u 后面的参数值

/1"u”,就是-u 指定参数

//*"。默认值

1/"用户名,默认为空”说明

flag.StringVar(&user,"u","',”用户名,默认为空”)

flag.StringVar(&pwd。"pwd"。"",“密码,默认为空”)

flag.StringVar(&host,"h","localhost","主机名,默认为 Localhost")

flag.Intvar(&port,"port","3306","端口号,默认为3306")

//这里有一个非常重要的操作,转换,必须调用该方法

flag.Parse()

//输出结果

fmt.Printf("user=%v pwd=%v host-%v port=%",

user, pwd, host, port)

通过这个指令参数来获取参数值,来代码实现。打开文档,点击 flag,实现了命令行参数的解析

func Parse

func Parse()

 0S.Args (1]中解析注册的 Mlag。必须在所到都注册好而来访问其值时现行。未注册知使用 flag -help 时,会返回 ErrHelp.

func IntVar

func Intvar(p *int, name string, value int, ueuge string)

Intvar 用指定的各称、默认值、使用信息注册一个 int 类型 Mag,并将 flag 的值保存到 p 指向的变量。

Localhost 是主机名总经理默认为 localhost。默认意思是没有指定这个参数,house 的默认就是 localhostFlag 端口 inter 类型用的是 VR后面必须调用转换方法。打开文档,点击 flag点击覆盖下面有个 PLC。往下 lawyer。往下走看这里点一下从这个数组里面解析注册的 flag。必须在所有 flag 都注册好后,才能访问执行。简而言之,就是必须进行转换,才能真正的把这个切片里面的这些值转换成功

演示:

D:goproject\src go_code^chapter14\F lagdemo>test.exe -u root -pud 123456 -h 127.0.0.5 -port 8088

user-root pwd=123456 host=127.0.0.5 port-8080

D:\goproject\src\o_codeNchapter14\flagdemo>test.exe -pwd 123456 -h 127.0.0.5 -port 8088 -u tonjack

user-tomjack pwd=123456 host-127.0.0.5 port-8080

D:\goproject\src\go_code chapter14\lagdemo>test.exe -pwd 123456 -h 127.0.0.5 -u tomjack

user=tomjack pwd=123456 host=127.0.0.5 port=3306

相关文章
|
8月前
|
应用服务中间件 容器
从零手写实现 tomcat-07-war 如何解析处理三方的 war 包?
这是一个关于构建Web应用和理解类加载器的文章摘要。作者探讨了如何解析和处理WAR包,使用Netty权威指南系列(BIO, NIO, AIO)作为背景阅读。文章通过一个简单的Web项目实例,展示了项目的目录结构,包括`pom.xml`, `web.xml`和`IndexServlet`。作者还介绍了自定义的`WebAppClassLoader`,它扩展了`URLClassLoader`,用于根据类路径加载非当前项目类。最后提到了一个名为mini-cat的开源项目,它是简易版Tomcat实现,可在GitHub上找到。
|
8月前
|
存储 Java API
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
1049 0
http数据包抓包解析
http数据包抓包解析
|
4月前
|
网络协议 网络虚拟化
接收网络包的过程——从硬件网卡解析到IP
【9月更文挑战第18天】这段内容详细描述了网络包接收过程中机制。当网络包触发中断后,内核处理完这批网络包,会进入主动轮询模式,持续处理后续到来的包,直至处理间隙返回其他任务,从而减少中断次数,提高处理效率。此机制涉及网卡驱动初始化时注册轮询函数,通过软中断触发后续处理,并逐步深入内核网络协议栈,最终到达TCP层。整个接收流程分为多个层次,包括DMA技术存入Ring Buffer、中断通知CPU、软中断处理、以及进入内核网络协议栈等多个步骤。
http数据包抓包解析课程笔记
http数据包抓包解析课程笔记
|
5月前
|
XML 存储 JavaScript
xml介绍与解析,及xml库包使用
xml介绍与解析,及xml库包使用
55 0
|
5月前
|
机器学习/深度学习 计算机视觉 Python
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
214 0
|
5月前
|
网络协议 网络虚拟化
解析接收网络包的过程
【8月更文挑战第6天】IP层->TCP层->Socket层
|
6月前
|
存储 数据挖掘 Linux
探索Linux命令rpm2cpio:解析RPM包内容的利器
`rpm2cpio`是Linux下用于从RPM包中提取内容的工具,它将`.rpm`转换为CPIO归档。无需安装,可直接访问包内文件,适合数据分析。命令简单,常与`cpio`结合使用,如`rpm2cpio package.rpm | cpio -idmv`解压文件。示例包括提取特定文件和列出包内所有文件。注意权限、路径和文件完整性,使用前备份数据,并查阅文档以优化使用。
|
6月前
|
存储 Python 容器
`click`是一个用于构建命令行接口的Python包,它提供了简单、可组合的命令行解析器。
`click`是一个用于构建命令行接口的Python包,它提供了简单、可组合的命令行解析器。

推荐镜像

更多