15.go install

1.go install
	命令go install用于编译并安装指定的代码包及它们的依赖包。当指定的代码包的依赖包还没有被编译和安装时,该命令会先去处理依赖包
	实际上,go install命令只比go build命令多做了一件事,即:安装编译后的结果文件到指定目录。
	安装代码包会在当前工作区的 pkg/<平台相关> 下生成归档文件
	安装命令源码文件会在当前工作区的 bin 目录或  $GOBIN 目录下生成可执行文件

	执行该命令且不追加任何参数时,它会视图把当前目录作为代码包并安装
	执行该命令且以代码包的导入路径作为参数时,该代码包及其依赖会被安装
	执行该命令且以命令源码文件及相关库源码文件作为参数时,只有这些文件会被编译安装

	go install 库源码文件
		那么go install命令会把编译后的结果文件保存在源码文件所在工作区的pkg目录下,
	  这个结果文件就是对应的代码包归档文件(也叫静态链接库文件,名称以.a结尾).
		相比之下,我们在使用go build命令对仅包含库源码文件的代码包进行编译时,是不会在当前工作区的src目录以及pkg目录下产生任何结果文件的。
	  结果文件会出于编译的目的被生成在临时目录中,但并不会使当前工作区目录产生任何变化。

	go install 
	  如果我们在执行go install命令时不后跟任何代码包参数,那么命令将试图编译当前目录所对应的代码包

	执行go install命令后会对指定代码包先编译再安装。其中,编译代码包使用了与go build命令相同的程序。所以,执行go install命令后也会首先建立一个名称以go-build为前缀的临时目录。如果我们想强行重新安装指定代码包及其依赖包,那么就需要加入标记-a

	还有一个问题:上述的安装过程涉及到了那么多代码包,那为什么goc2p项目的pkg目录中只包含该项目中代码包的归档文件呢?
	实际上,go install命令会把标准库中的代码包的归档文件存放到Go语言安装目录的pkg子目录中,
	而把指定代码包依赖的第三方项目的代码包的归档文件存放到当前工作区的pkg目录下。这样就实现了Go语言标准库代码包的归档文件与用户代码包的归档文件,
	以及处在不同工作区的用户代码包的归档文件之间的分离

	在环境变量GOPATH中包含多个工作区目录路径时,我们需要在编译命令源码文件前先对环境变量GOBIN进行设置。
	实际上,这个环境变量所指的目录路径就是命令程序生成的结果文件的存放目录。go install命令会把相应的可执行文件放置到这个目录中

	由于命令go build在编译库源码文件后不会产生任何结果文件,所以自然也不用会在意结果文件的存放目录。
	在该命令编译单一的命令源码文件或者包含一个命令源码文件和多个库源码文件时,在结果文件存放目录无效的情况下会将结果文件(也就是可执行文件)
	存放到执行该命令时所在的目录下。因此,即使环境变量GOBIN的值无效,我们在执行go build命令时也不会见到这个错误提示信息。

	然而,go install命令中一个很重要的步骤就是将结果文件(归档文件或者可执行文件)存放到相应的目录中。所以,go install命令在安装命令源码文件时,如果环境变量GOBIN的值无效,则它会在最后检查结果文件存放目录的时候发现这一问题,
	并打印与上述示例所示内容类似的错误提示信息,最后直接退出。


https://github.com/hyper0x/go_command_tutorial/blob/71833ffcab991a2931d3106490d96008f45c3177/0.2.md

猜你喜欢

转载自blog.csdn.net/enlyhua/article/details/82634128