GOROOT:Go 语言安装根目录的路径,也就是 GO 语言的安装路径。
GOPATH:若干工作区目录的路径。是我们自己定义的工作空间。
GOBIN:GO 程序生成的可执行文件(executable file)的路径
设置 GOPATH 有什么意义吗?
可以把 GOPATH 简单理解成 Go 语言的工作目录,它的值是一个目录的路径,也可以是 多个目录路径,每个目录都代表 Go 语言的一个工作区(workspace)。
工作区放置 Go 语言的源码文件(source file),以及安装 (install)后的归档文件(archive file,“.a” .exe)和可执行文件 (executable file)。每个工作区都会有src、pkg、bin三个文件夹。
go包
Go 语言的源码以代码包为基本组织单位。在文件系统中,代码包与目录一一对应。由于目录可以有子目录,所以代码包也可以有子包。 一个代码包中可以包含任意个以.go 为扩展名的源码文件,这些源码文件都需要被声明属于同一个代码包。 代码包的名称一般会与源码文件所在的目录同名。如果不同名,那么在构建、安装的过程中会以代码包名称为准。
每个代码包都会有导入路径。代码包的导入路径是其他代码在使用该包中的程序实体时,需 要引入的路径。在实际使用程序实体之前,我们必须先导入其所在的代码包。工作区中,一个代码包的导入路径实际上就是从 src 子目录,到该包的实际存储位置的相 对路径。
Go 语言源码的组织方式就是以环境变量 GOPATH、工作区、src 目录和代码包为 主线的。一般情况下,Go 语言的源码文件都需要被存放在环境变量 GOPATH 包含的某个 工作区(目录)中的 src 目录下的某个代码包(目录)中。
go设置国内代理
go env -w GOPROXY=https://goproxy.cn
goget弃用
1.17.1版本之后,go get 命令便不能再用了,全部改为go install 命令。
“go install pkg@version”代替
go install github.com/go-sql-driver/mysql@latest
go install github.com/jmoiron/sqlx@latest
gobuild
1. 运行go build命令时加入标记-x,这样可以看到go build命令具体都执行了哪些操作。另外也可以加入标记-n,这样可以只查看具体操作而不执行它们。
2. 运行go build命令时加入标记-v,这样可以看到go build命令编译的代码包的名称。 它在与-a标记搭配使用时很有用。
1. Go 语言在多个工作区中查找依赖包的时候是以怎样的顺序进行的?
如 a 依赖 b ,b依赖c,会先查找c包,
在查找依赖包的时候,会先查找 GOROOT目录,如果没有找到依赖的包,才到工作区去找相应的包。在工作区中按照设置的先后顺序来查找的,也从第一个开始,依次查找,如果找到就不再继续查找,如果没有找到,就报错。go get 会下载代码包到src目录,但是只会下载到第一个工作区目录。在Go语言程序中,每个包都有一个全局唯一的导入路径。导入语句中类似"github.com/xxxx/tem"的字符串对应包的导入路径。Go语言的规范并没有定义这些字符串的具体含义或包来自哪里,它们是由构建工具来解释的。
一个导入路径代表一个目录中的一个或多个Go源文件。除了包的导入路径,每个包还有一个包名,包名一般是短小的名字(并不要求包名是唯一的),包名在包的声明处指定。
2. 如果在多个工作区中都存在导入路径相同的代码包会产生冲突吗?
不冲突,因为按顺序找到所需要的包就不往后找了。