工作区:放go的源码目录;
gopath:指向工作区的路径;
设置gopath的意义:
环境变量 GOPATH 的值可以是一个目录的路径,也可以包含多个目录路径,每个目录都代表 Go 语言的一个工作区(workspace)。这些工作区放置Go语言的源码文件(source file),以及安装(install)后的归档文件(archive file,也就是以“.a"为扩展名的文件)和可执行文件(executable file).
Go语言源码的组织方式:
1.Go 语言的源码是以代码包为基本组织单位的。在文件系统中,这些代码包其实是与目录一一对应的。目录可以有子目录,所以代码包也可以有子包。
2.一个代码包中可以包含任意个以.go 为扩展名的源码文件,这些源码文件都需要被声明为属于同一个代码包。代码包的名称一般会与这些源码文件所在的目录同名。如果不同名,那么在构建、安装的过程中会以代码包名称为准。
3.每个代码包都会有导入路径。代码包的导入路径是其他代码在使用该包中的程序实体需要引入的路径。在工作区中,一个代码包的导入路径实际上就是从 src 子目录,到该包的实际存储位置的相对路径。
源码安装后的结果:
源码文件通常会被放在某个工作区的 src 子目录下。
如果产生了归档文件,就会放进该工作区的 pkg 子目录;
如果产生了可执行文件,就可能会放进该工作区的 bin 子目录;
某个工作区的 src 子目录下的源码文件在安装后一般会被放置到当前工作区的 pkg 子目录下对应的目录中,或者被直接放置到该工作区的 bin 子目录中。
构建和安装Go程序的个过程:
构建使用命令go build,安装使用命令go install。
构建和安装代码包的时候都会执行编译、打包等操作,并且这些操作生成的任何文件都会先被保存到某个临时的目录中。安装操作会先执行构建,然后还会进行链接操作,并且把结果文件搬运到指定目录。
如果构建的是库源码文件,那么操作的结果文件只会存在于临时目录中。这里的构建的主要意义在于检查和验证。
如果构建的是命令源码文件(包含main()的源码文件),那么操作的结果文件会被搬运到那个源码文件所在的目录中。
如果安装的是库源码文件,那么结果文件会被搬运到它所在工作区的 pkg 目录下的某个子目录中。
如果安装的是命令源码文件,那么结果文件会被搬运到它所在工作区的 bin 目录中,或者环境变量gobin所指向的bin目录。
go build 命令的一些可选参数和用法。
在运行go build命令的时候,默认不会编译目标代码包所依赖的那些代码包。当然,如果被依赖的代码包的归档文件不存在,或者源码文件有了变化,那它还是会被编译。
go build -a 强制编译目标代码包所依赖的代码包。
go build -i 不仅强制编译目标代码包所依赖的代码包,还要安装他们的归档文件。
go build -x 可以看到go build命令具体执行了哪些操作。
go build -n 只查看go build 命令的具体操作,而不执行它们。
go build -v 看到go build 命令编译时代码包的名称
go get命令
自动从一些主流公用代码仓库(比如 GitHub)下载目标代码包,并把它们安装到环境变量GOPATH包含的第 1 工作区的相应目录中。如果存在环境变量GOBIN,那么仅包含命令源码文件的代码包会被安装到GOBIN指向的那个目录。 最常用的几个标记:
-u :下载并安装代码包,不论工作区中是否存在它们。
-d :只下载代码包,不安装代码包。
-fix :在下载代码包后先运行一个用于根据当前 Go 语言版本修正代码的工具,然后再安装代码包。
-t :同事下载测试所需要的代码包。
-insecure:允许通过非安全的网络协议下载和安装代码包。