第二讲 命令源码文件
此为 《极客时间&Go语言核心36讲》 个人笔记,具体课程详见极客时间官网。
Table of Contents generated with DocToc
- 第二讲 命令源码文件
- 1. 什么是命令源码文件?
- 2. 命令参数的接收和解析
- 2.1 命令源码文件怎么接收参数?
- 2.2 怎样在运行源代码文件的时候传入参数,又怎样查看参数的使用说明?
- 3. 补充
- 3.1 问题
- 3.2 其他
第二讲 命令源码文件
源码文件分为三种:
- 命令源码文件
- 库源码文件
- 测试源码文件
1. 什么是命令源码文件?
如果一个源码文件声明属于main
包,并且包含一个无参数声明且无结果声明的main
函数,那么它就是命令源码文件。
命令源码文件是程序的运行入口,是每个可独立运行的程序必须拥有的,有且只有一个。
2. 命令参数的接收和解析
2.1 命令源码文件怎么接收参数?
Go
语言标准库中有一个代码包专门用于接收和解析命令参数——flag
。
// func StringVar(p *string, name string, value string, usage string) {}
var name string
flag.StringVar(&name, "name", "zcz", "my name is ... ?")
flag.Parse()
fmt.Println(name)
参数说明:
- p :用于存储该命令参数的值的地址;
- name:参数名称;
- value:默认值;
- usage:该命令参数的简单描述,在打印命令说明时会用到;
flag.Parse()
解析命令参数并把它们的值付给相应的变量。对该函数的调用必须在所有命令参数存储载体的声明(如上name
的声明)和设置(如上flag.StringVar()
的调用)之后,并且在读取任何命令参数值之前进行。
除了flag.StringVar()外,还有一个flag.String()方法,它会返回一个指向存储命令参数的地址:
// func String(name string, value string, usage string) *string {}
name := flag.String("name", "zcz", "my name is ... ?")
flag.Parse()
fmt.Println(name)
2.2 怎样在运行源代码文件的时候传入参数,又怎样查看参数的使用说明?
传参方式如下:
go run parameter.go -name="xxt"
//output: xxt
查看该命令源码文件的参数说明:
go run parameter.go --help
/* output:Usage of /var/folders/n2/m16dmxhn2mld82h_6ywcc14h0000gn/T/go-build1423020904/b001/exe/parameter:-name stringmy name is ... ? (default "zcz")
*/
其中,/var/folders/n2/m16dmxhn2mld82h_6ywcc14h0000gn/T/go-build1423020904/b001/exe/parameter
是go run
命令构建上述命令源码文件时临时生成的可执行文件的完整路径。
我们还可以:
go build parameter.go
./parameter.go --help
/* output:Usage of ./parameter:-name stringmy name is ... ? (default "zcz")
*/
3. 补充
3.1 问题
var name string
flag.StringVar(&name, "name1", "zcz01", "my name is ... ?")
flag.StringVar(&name, "name2", "zcz02", "wtf ?")
flag.Parse()
fmt.Println(name)
- 执行
go run parameter.go -name1="kodo" -name2="pili"
,输出为:pili
; - 执行
go run parameter.go -name2="pili" -name1="kodo"
,输出为:kodo
; - 执行
go run parameter.go -name1="kodo"
,输出为:kodo
; - 执行
go run parameter.go -name2="pili"
,输出为:pili
;
why?(后续解决)
3.2 其他
默认情况下,我们可以让命令源码文件接受哪些类型的参数值?
int ( int | int64 | uint | uint64 ) ,
float ( float | float64 ) ,
string ,
bool ,
duration ( 时间 ) ,
var ( 自定义 )我们可以把自定义的数据类型作为参数值的类型吗?如果可以,怎样做?
关键就是使用flag.var(),关键点在于需要实现flag包的Value接口。(后续会展开)
第二讲 命令源码文件相关推荐
- go语言学习笔记(2)命令源码文件
1.源码文件分类 环境变量GOPATH指向的是一个或多个工作区,而且每个工作区都会有以代码包为基本组织形式的源码文件. 源码文件分为三种,即:命令源码文件.库源码文件和测试源码文件. 2.什么是命令源 ...
- golang-命令源码文件
命令源码文件 命令源码文件的用途是什么,怎样编写它? 命令源码文件是程序的运行入口,是每个可独立运行的程序必须拥有的.我们可以通过构建或安装,生成与其对应的可执行文件,后者一般会与该命令源码文件的直接 ...
- linux应用程序逆向,Linux下查看并下载命令源码包(根据命令/应用程序逆向获取并且安装其所属源码包)...
使用linux的过程中,我们会熟悉各种命令,偶尔我们不禁会问,这些命令是怎么实现的,学习他们其实是学习linux高级系统编程很快捷的方法. 这些命令的源码肯定是存放在相应的包里面,但是是哪些包呢? 发 ...
- rm删除命令源码分析
为什么看? 想要在删除文件前,先覆盖文件内容,防止他人恢复文件,从而得到文件原内容:并且需要支持rm命令原本的参数选项: NAME rm - remove files or directories S ...
- linux的top命令源码解析:RES指标
CLion:2019.3.6 源码管理平台:Macbook Pro 10.12.6 C语言源码程序:Makefile格式的linux系统的top命令源码. top所在的系统:ubuntu 14.04 ...
- 视觉机器学习20讲-MATLAB源码示例(12)-RBF学习算法
视觉机器学习20讲-MATLAB源码示例(12)-RBF学习算法 1. RBF学习算法 2. Matlab仿真 3. 仿真结果 4. 小结 1. RBF学习算法 RBF(Radial Basis Fu ...
- javase11源码文件_JavaSE 7,8:确定特定文件系统支持的视图
javase11源码文件 如果您对文件或目录有疑问,例如文件是否隐藏,目录是否存在,文件大小以及拥有者,则可以从元数据中获得这些问题(以及许多其他问题)的答案,这是关于其他数据的数据. NIO.2将元 ...
- python撩人的代码,老师教已毕业的学生,用Python代码每天不定时撩女友,附源码文件...
原本就是学生会主席,在学校如此优秀的他,毕业参加工作,依然展现出好强的一面. 每天认真的工作,即使在工作之余也要用来给自己充电,所以难免会忽略女友,不够关心,免不了发脾气,甚至是争吵. 有一天,曾经大 ...
- 初识二维码 第二讲 二维码的结构
初识二维码 第二讲二维码的结构 它分为功能部分与编码部分.功能部分用于定位,与二维码的版本与格式等元数据的存储. 二维码的大小到21*21的格子到177*177的格子.边长数为除4余1.边长数减去17 ...
最新文章
- 汇编语言学习-寄存器(CPU工作原理)
- 如何理解 new (...args: any[]) => any
- jquery绑定方法on的
- mysql sql语句集合
- 解决Charles Response 中文乱码
- CISSP考试心得分享
- 通过手机获取微信公众号封面
- bat批处理与adb命令的配合
- 越来越大的人使用计算机的原因,为什么越来越多的人喜欢用WPS这款电脑软件?这几点是关键原因...
- ssd测试软件cy,简析物体识别SSD算法
- cnn是深度神经网络吗,cnn神经网络算法
- 了解一下ACM/ICPC比赛时间
- 【DX-BT24蓝牙模块连接Arduino与手机透传教程】
- 解决找不到roslyn\csc.exe文件问题
- c语言写一个测试缘分的程序,【心理测试】测你的缘分能求来吗
- 载波通信在电网智能化中的应用
- 编译mumps库时无法链接mpi库中的函数
- java基于springboot+vue的汽车租赁系统-在线租车
- 变转速Benchmark Dataset——SQ变转速振动信号数据集(SQV dataset)
- BZOJ2654: tree(陈立杰)
热门文章
- 如何在IE浏览器里面定位到关键字的位置(页面代码)和这个关键字位置模块的请求
- LeetCode之Maximum Depth of Binary Tree
- linux网络编程之用select函数实现io复用(基于TCP)引发的思考
- linux之学习linux系统相关的书籍
- 由于未分配内存的指针导致段错误
- 指数分布java_python-numpy-指数分布实例详解
- dell服务器报内存配置不正确,DELL 服务器系统提示错误解决的若干办法
- 成年人改变生活的方式,都是从它开始
- 东北大哥在线反套路hhhhhh | 今日最佳
- 还在用Excel做数据分析?两大方法5分钟完成别人一天的工作