2.3 标准命令概述

Go语言中包含了大量用于处理Go语言代码的命令和工具。其中,go命令就是最常用的一个,它有许多子命令。这些子命令都拥有不同的功能,如下所示。

  • build:用于编译给定的代码包或Go语言源码文件及其依赖包。

  • clean:用于清除执行其他go命令后遗留的目录和文件。

  • env:用于打印Go语言环境信息。

  • fix:用于执行go tool fix命令以修正给定代码包的源码文件中包含的过时语法和代码调用。

  • fmt:用于执行gofmt命令以格式化给定代码包中的源码文件。

  • get:用于下载和安装给定代码包及其依赖包。

  • install:用于编译和安装给定的代码包及其依赖包。

  • list:用于显示给定代码包的信息。

  • run:用于编译并运行给定的命令源码文件。

  • test:用于测试给定的代码包。

  • tool:用于运行Go语言的特殊工具。

  • version:用于显示当前安装的Go语言的版本信息。

我们在执行这些命令的时候可以通过附加一些额外的标记来定制命令的执行过程。下面是一些比较通用的标记。

  • -a:用于强行重新构建所有涉及的Go语言代码包(包括Go语言标准库中的代码包),即使它们已经是最新的了。

  • -n:使命令仅打印在执行期间使用到的所有命令,而不真正执行它们。

  • -v:用于打印出命令执行过程中涉及的Go语言代码包的名字。这些代码包一般包括我们给定的目标代码包,有时还会包括该代码包直接或间接依赖的代码包。

  • -work:打印出命令执行时生成和使用的临时工作目录的名字,且命令执行完成后不对它进行删除。

  • -x:打印出命令执行期间使用到的所有命令。

我们也可以暂且把这些标记看作命令的特殊参数。上面展示的这些特殊参数可以添加到命令名称和命令的真正参数中间。用于构建、安装、运行和测试Go语言代码包或源码文件的命令都支持这些特殊参数。我们会在本书后面的内容中再次提及和使用它们。

除了这些go命令的子命令之外,Go语言还附带了很多有用的命令和工具。比如上面提到的gofmt命令,以及用于展示指定代码包的文档的godoc命令(需要另行安装)。我们还可以通过执行go tool命令来运行一些特殊的Go工具。比较常用的Go语言的特殊工具有以下几个。

  • fix:可以把给定代码包的所有Go语言源码文件中的旧版本代码修正为新版本。它是我们升级Go语言版本后会使用到的工具。

  • vet:用于检查Go语言源码中静态错误的简单工具。我们可以使用它检测一些常见的Go语言代码编写错误。

  • pprof:用于以交互的方式访问一些性能概要文件。命令将会分析给定的概要文件,并根据要求提供高可读性的输出信息。这个工具可以分析的概要文件包括CPU概要文件、内存概要文件和程序阻塞概要文件。这些内含Go语言运行时信息的概要文件可以通过标准库代码包runtimeruntime/pprof中的程序来生成。

  • cgo:用于帮助Go语言代码使用C语言代码库,以及使Go语言代码可以被C语言代码引用。

在这里,我们并未深入说明这些命令和工具,本书也不会涉及它们的高级用法。我们只会在用到的时候顺带着进行一些简要的说明。不过,作为本书的一个附属品,我把Go语言命令的详细说明(Go命令教程)放在了著名的代码托管网站GitHub上。具体网址是https://github.com/hyper-carrot/go_command_tutorial。只要我们用Go语言开发软件就会用到这些命令,所以该教程会尽量做到详实。我也会持续地维护它,以便读者在需要时免费查阅。