generate。用于识别指定代码包中源码文件中的go:generate注释,并执行其携带的任意命令。该命令独立于 Go 语言标准的编译和安装体系。如果你有需要解析的go:generate注释,就单独运行它。这个命令非常有用,我常用它自动生成或改动 Go 源码文件。
list。用于显示指定代码包的信息,它可谓是代码包分析的一大便捷工具。利用 go 语言标准库代码包 text/template 中规定的模板语法,你可以非常灵活地控制输出信息。
tool。用于运行 Go 语言的特殊工具。
vet。用于检查指定代码包中的 Go 语言源码,并报告发现可疑代码问题。该命令提供了除编译以外的又一个程序检查方法,可用于找到程序中的潜在错误。
命令额外标记:
-a:用于强调重新编译所有涉及的 Go 语言代码包。
-n:使命令仅打印其执行过程中用到的所有命令,而不真正执行它们。
-race:用于检测程序中的数据竞争问题。
-v:用于打印命令执行过程中涉及的代码包。
-work:用于打印命令执行时生成和使用的临时工作目录的名字,且命令执行完成后不删除它们。
-x:使命令仅打印其执行过程中用到的所有命令,同时执行它们。
pprof:用于以交互的方式访问一些性能概要文件。命令将会分析给定的概要文件并根据要求提供高可读性的输出信息。这个工具可以分析的概要文件包括 CPU 概要文件、内存概要文件和程序阻塞概要文件。这些包含 Go 程序运行信息的概要文件,可以通过标准库代码包 runtime 和 runtime/pprof 中的程序来生成。
trace:用于读取 Go 程序踪迹文件,并以图形化的方式展示出来。它能够让我们深入了解 Go 程序在运行过程中的内部情况。比如,当前进程中堆的大小及使用情况。又比如,程序中的多个 goroutine 是怎样被调度的,以及它们在某个时刻被调度的原因。Go 程序踪迹文件可以通过标准库代码包 runtime/trace 和 net/http/pprof 中的程序来生成。
第 2 章:语法概览
未使用的变量为了使其不报错可以在变量 x 的后面添加这样一行代码:_ = x。
类型断言表达式:v1.(I1) // v1 表示一个接口值,I1 表示一个接口类型
如果 v1 是一个非接口值,那么必须在做类型断言之前把它转换成接口值。因为 Go 中的任何类型都是空接口类型的实现类型,所以一般会这样做:interface{}(v1).(I1)
如果类型断言的结果为否,就意味着该类型断言是失败的。失败的类型断言会引发一个运行时恐慌(或称运行时异常),解决方法是:var i1, ok = interface{}(v1).(I1)。这里声明并赋值了两个变量,其中 ok 是布尔类型的变量,它的值体现了类型断言的成败。如果成功,i1 就会是经过类型转换后的 I1 类型的值,否则它将会是 I1 类型的零值(或称默认值)。