理解Go语言组件flag
作用
主要用来实现命令行的参数解析,以达到实现以下效果的目的
$ cmd -flagname 123
使用方式
flag是Go语言的内置包,能接收的参数类型主要有字符串、布尔和数值类型。
方式一
func main() {
var ip = flag.String("ip", "127.0.0.1", "此处传入IP地址")
flag.Parse()
fmt.Println(*ip)
}
我们在main函数中调用flag.String
函数来定义命令,该函数共有三个参数
- 第一个参数是命令名称
- 第二个参数为默认值,也就是不传ip时默认拿到的值
- 第三个参数是给用户的提示
同时该函数返回的是指针类型,打印变量ip时记得加上指针符号来输出地址对应的值。在执行flag.String后,记得执行flag.Parse来解析命令,否则不能执行成功。我们来测试一下,先键入一个错的参数,会得到以下提示。
go run main.go -i
flag provided but not defined: -i
Usage of /var/folders/3s/5v6r481x17x5ks_7q1dzmlsw0000gp/T/go-build400337564/b001/exe/main:
-ip string
此处传入IP地址 (default "127.0.0.1")
加上-ip
参数和值,可以直接获取到对应的值
go run main.go -ip 192.168.1.1
192.168.1.1
除了-ip 192.168.1.1
这种形式外,以等号赋值的方式也是支持的
go run main.go -ip=192.168.1.1
192.168.1.1
现在什么都不传,可以直接拿到设置的默认值
go run main.go
127.0.0.1
方式二
除上述内容之外,还有一种写法,我们再增加一个端口号为例
var port int
func init() {
flag.IntVar(&port, "port", 80, "端口号")
}
func main() {
flag.Parse()
fmt.Println("port", port)
}
首先定义一个整型变量port,在init函数中调用flag.IntVar函数,该函数与flag.String相比,少了返回值,且多一个参数,第一个参数是预先定义好的变量,为了方便IntVar内部修改变量值,所以该参数传引用类型。
方式三
如果我们想在接收参数值的过程当中做一些处理,那么也可以自己进行实现。假如我们需要对传入的用户名user
进行处理,加上一个_suffix
后缀。
type user string
func (u *user) String() string {
return fmt.Sprint(*u)
}
func (u *user) Set(value string) error {
if len(value) < 3 {
return errors.New("姓名长度不得小于3位")
}
*u = user(value + "_suffix")
return nil
}
首先需要定义一个类型,然后实现两个方法String与Set,在Set方法中我对传入的值进行了长度判断,如果小于3个字符就抛出错误,否则就将传入的值拼接一个后缀_suffix
。
var userFlag user
func main() {
flag.Var(&userFlag, "user", "用户名")
flag.Parse()
fmt.Println(userFlag)
}
接下来定义一个user类型的变量,然后在main函数中调用flag.Var方法,将变量地址传入,接下来执行命令做测试。
go run flagVar.go -user pingye
pingye_suffix
成功拼接上了后缀。
Go语言组件学习示例开源库,欢迎star
https://github.com/EnochZg/golang-examples
理解Go语言组件flag的更多相关文章
- 【转载】理解C语言中的关键字extern
原文:理解C语言中的关键字extern 最近写了一段C程序,编译时出现变量重复定义的错误,自己查看没发现错误.使用Google发现,自己对extern理解不透彻,我搜到了这篇文章,写得不错.我拙劣的翻 ...
- 深入理解c语言_从编译器的角度考虑问题_纪念Dennis Ritchie先生
开源中国: Dennis Ritchie教授过世了,他发明了C语言,一个影响深远并彻底改变世界的计算机语言.一门经历40多年的到今天还长盛不训的语言,今天很多语言都受到C的影 响,C++,Java,C ...
- 深入理解C语言的函数调用过程 【转】
转自:http://blog.chinaunix.net/uid-25909619-id-4240084.html 原文地址:深入理解C语言的函数调用过程 作者:wjlkoorey258 本文 ...
- "深入理解C语言" 指针
本文对coolshell中的"深入理解C语言"这篇文章中提到的指针问题, 进行简要的分析. #include <stdio.h> int main(void){ ]; ...
- 理解C语言中指针的声明以及复杂声明的语法
昨天刚把<C程序设计语言>中"指针与数组"章节读完,最终把心中的疑惑彻底解开了.如今记录下我对指针声明的理解.顺便说下怎样在C语言中创建复杂声明以及读懂复杂声明. 本文 ...
- 这样子来理解C语言中指针的指针
友情提示:阅读本文前,请先参考我的之前的文章<从四个属性的角度来理解C语言的指针也许会更好理解>,若已阅读,请继续往下看. 我从4个属性的角度来总结了C语言中的指针概念.对于C语言的一个指 ...
- 深入理解C语言 - 指针使用的常见错误
在C语言中,指针的重要性不言而喻,但在很多时候指针又被认为是一把双刃剑.一方面,指针是构建数据结构和操作内存的精确而高效的工具.另一方面,它们又很容易误用,从而产生不可预知的软件bug.下面总结一下指 ...
- 通过实战理解C语言精要——函数篇
前言 本篇博客是对C语言函数部分的重点内容和细枝末节通过实战得到的经验的总结精炼,不涵盖C语言函数的全部内容,所有提炼内容均来自提炼与实战,阅读需要对函数部分有一定基础,可用于对C语言函数的理解提 ...
- 如何理解vue.js组件的作用域是独立的
vue.js组件的作用域是独立,可以从以下三个方面理解: 1.父组件模板在父组件作用域内编译,父组件模板的数据用父组件内data数据:2.子组件模板在子组件作用域内编译,子组件模板的数据用子组件内da ...
随机推荐
- TNS-04612: "orcl--117-118" 的 RHS 为空
安装数据库时,TNS-04612: "orcl--117-118" 的 RHS 为空 解决办法: 把 D:\app\xxx\product\11.2.0\dbhome_1\NETW ...
- 如何设计一个LRU Cache
如何设计一个LRU Cache? Google和百度的面试题都出现了设计一个Cache的题目,什么是Cache,如何设计简单的Cache,通过搜集资料,本文给出个总结. 通常的问题描述可以是这样: Q ...
- 二十一世纪计算 | John Hopcroft:AI革命
编者按:信息革命的浪潮浩浩汤汤,越来越多的人将注意力转向人工智能,想探索它对人类生产生活所产生的可能影响.人工智能的下一步发展将主要来自深度学习,在这个领域中,更多令人兴奋的话题在等待我们探讨:神经网 ...
- Ubuntu14.04下GAMIT10.6的安装
#安装步骤将ubuntu切换到root用户权限 1 $sudo -s ##安装必要软件 1 2 3 4 5 $ apt-get install gcc $ apt-get install gfortr ...
- 重大改革!Python,最接近人工智能的语言~将被加入高考科目!
就在前几天,和一位浙江省高校的信息技术老师聊天,我得到了一个震惊的消息: 明年,浙江省信息技术教材将不会在使用晦涩难懂的VB语言,而是改学更简单易懂的Python语言.也就是说, Python语言将纳 ...
- 【WPF学习】第五十一章 动画缓动
线性动画的一个缺点是,它通常让人觉得很机械且不能够自然.相比而言,高级的用户界面具有模拟真实世界系统的动画效果.例如,可能使用具有触觉的下压按钮,当单击时按钮快速弹回,但是当没有进行操作时它们会慢慢地 ...
- 一行python代码搞定文件分享
给同事分享文件,如你所知通过聊天工具,网盘或linux命令各种方法,还有一个也可以尝试下:使用一行python代码快速搭建一个http服务器在局域网内进行下载. python3使用: python3 ...
- 7-7 jmu_python_是否是数 (10 分)
本题要求从键盘输入一个字符串,判断该串是否属于整数.浮点数或者复数的表示 输入格式: 输入一个字符串 输出格式: 输出yes或no 输入样例: -299 输出样例: yes a = input() t ...
- 先导篇:SpringCloud介绍篇
1.什么是SpringCloud Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载 ...
- http请求缓存头详解
缓存的作用:1.减少延迟(页面打开的速度).2.降低服务器负载(先取缓存,无缓存在请求服务器,有效降低服务器的负担).3.保证稳定性(有个笑话是手机抢购时为了保证服务器的稳定性,在前端写个随机数限制百 ...