此为 《极客时间&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/parametergo 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接口。(后续会展开)

第二讲 命令源码文件相关推荐

  1. go语言学习笔记(2)命令源码文件

    1.源码文件分类 环境变量GOPATH指向的是一个或多个工作区,而且每个工作区都会有以代码包为基本组织形式的源码文件. 源码文件分为三种,即:命令源码文件.库源码文件和测试源码文件. 2.什么是命令源 ...

  2. golang-命令源码文件

    命令源码文件 命令源码文件的用途是什么,怎样编写它? 命令源码文件是程序的运行入口,是每个可独立运行的程序必须拥有的.我们可以通过构建或安装,生成与其对应的可执行文件,后者一般会与该命令源码文件的直接 ...

  3. linux应用程序逆向,Linux下查看并下载命令源码包(根据命令/应用程序逆向获取并且安装其所属源码包)...

    使用linux的过程中,我们会熟悉各种命令,偶尔我们不禁会问,这些命令是怎么实现的,学习他们其实是学习linux高级系统编程很快捷的方法. 这些命令的源码肯定是存放在相应的包里面,但是是哪些包呢? 发 ...

  4. rm删除命令源码分析

    为什么看? 想要在删除文件前,先覆盖文件内容,防止他人恢复文件,从而得到文件原内容:并且需要支持rm命令原本的参数选项: NAME rm - remove files or directories S ...

  5. linux的top命令源码解析:RES指标

    CLion:2019.3.6 源码管理平台:Macbook Pro 10.12.6 C语言源码程序:Makefile格式的linux系统的top命令源码. top所在的系统:ubuntu 14.04 ...

  6. 视觉机器学习20讲-MATLAB源码示例(12)-RBF学习算法

    视觉机器学习20讲-MATLAB源码示例(12)-RBF学习算法 1. RBF学习算法 2. Matlab仿真 3. 仿真结果 4. 小结 1. RBF学习算法 RBF(Radial Basis Fu ...

  7. javase11源码文件_JavaSE 7,8:确定特定文件系统支持的视图

    javase11源码文件 如果您对文件或目录有疑问,例如文件是否隐藏,目录是否存在,文件大小以及拥有者,则可以从元数据中获得这些问题(以及许多其他问题)的答案,这是关于其他数据的数据. NIO.2将元 ...

  8. python撩人的代码,老师教已毕业的学生,用Python代码每天不定时撩女友,附源码文件...

    原本就是学生会主席,在学校如此优秀的他,毕业参加工作,依然展现出好强的一面. 每天认真的工作,即使在工作之余也要用来给自己充电,所以难免会忽略女友,不够关心,免不了发脾气,甚至是争吵. 有一天,曾经大 ...

  9. 初识二维码 第二讲 二维码的结构

    初识二维码 第二讲二维码的结构 它分为功能部分与编码部分.功能部分用于定位,与二维码的版本与格式等元数据的存储. 二维码的大小到21*21的格子到177*177的格子.边长数为除4余1.边长数减去17 ...

最新文章

  1. 汇编语言学习-寄存器(CPU工作原理)
  2. 如何理解 new (...args: any[]) => any
  3. jquery绑定方法on的
  4. mysql sql语句集合
  5. 解决Charles Response 中文乱码
  6. CISSP考试心得分享
  7. 通过手机获取微信公众号封面
  8. bat批处理与adb命令的配合
  9. 越来越大的人使用计算机的原因,为什么越来越多的人喜欢用WPS这款电脑软件?这几点是关键原因...
  10. ssd测试软件cy,简析物体识别SSD算法
  11. cnn是深度神经网络吗,cnn神经网络算法
  12. 了解一下ACM/ICPC比赛时间
  13. 【DX-BT24蓝牙模块连接Arduino与手机透传教程】
  14. 解决找不到roslyn\csc.exe文件问题
  15. c语言写一个测试缘分的程序,【心理测试】测你的缘分能求来吗
  16. 载波通信在电网智能化中的应用
  17. 编译mumps库时无法链接mpi库中的函数
  18. java基于springboot+vue的汽车租赁系统-在线租车
  19. 变转速Benchmark Dataset——SQ变转速振动信号数据集(SQV dataset)
  20. BZOJ2654: tree(陈立杰)

热门文章

  1. 如何在IE浏览器里面定位到关键字的位置(页面代码)和这个关键字位置模块的请求
  2. LeetCode之Maximum Depth of Binary Tree
  3. linux网络编程之用select函数实现io复用(基于TCP)引发的思考
  4. linux之学习linux系统相关的书籍
  5. 由于未分配内存的指针导致段错误
  6. 指数分布java_python-numpy-指数分布实例详解
  7. dell服务器报内存配置不正确,DELL 服务器系统提示错误解决的若干办法
  8. 成年人改变生活的方式,都是从它开始
  9. 东北大哥在线反套路hhhhhh | 今日最佳
  10. 还在用Excel做数据分析?两大方法5分钟完成别人一天的工作