golang基础(1.GOPATH和工作区)
官方命令文档
设置gopath的意义是什么?
gopath是系统的环境变量,它是由一个或者多个文件目录路径组成。每一个文件路径是一个GO语言的工作区(workspace)。这些工作区用于存放go项目的源代码文件(sourcefile),安装(go install)以后的归档文件,编译后的可执行文件(go build)。
go语言的源码的组织方式
- 在go语言中,包作为go语言的基本单位,这些包的名称和文件系统中目录名称一一对应,一个目录下可以有多个子目录,相对应的一个包下可以有多个子包
- 一个包下可以包含多个.go文件,这些源代码必须被声明为在同一包下。代码包的名称一般与源码所在的目录同名,如果不同名,那么在安装过程中会一代码文件中的包声明为准
- 每个包拥有自己的导入路径,在工作区中一个包的导入路径实际上就是从src子目录到该包存储位置的相对路径
了解源码安装后的后果
- 源码文件会被放到某个工作区的src目录下
- 如果安装后产生了归档文件,则会被放进该工作区的pkg子目录下
- 如果安装后产生了可执行文件,则会被放进该工作区的bin子目录下
理解构建和安装go程序的过程
- 构建命令使用
go build,安装命令使用go install,构建和安装都会进行打包编译等操作,并且将这些操作生成的文件放到某个临时目录当中 - 如果构建的是
库源码文件,这些文件只会被保存在临时目录当中,这里构建的意义在于检查和验证。 - 如果构建的是
命令源码文件,那么操作的结果文件会被搬运到那个源码文件所在的目录中。 - 安装操作会
先构建,然后把文件转运到指定的目录下。如果安装的是库源码文件,那么结果文件会被搬运到它所在工作区的 pkg 目录下的某个子目录 。 - 如果安装的是
命令源码文件,那么结果文件会被搬运到它所在工作区的 bin 目录中,或者环境变量GOBIN指向的目录中。
go build 命令的一些可选项的用途和用法
在运行go build的时候,默认是不会编译目标代码所依赖的那些代码包。如果依赖代码包的归档文件不存在,或者源码发生了变化,那么它还是会被编译。如果要强制编译她们,可以在执行命令时加上选项 -a,此时目标代码包以及所依赖的代码包都会被编译,哪怕是标准库中的代码包也是如此。另外,如果不但要编译依赖的代码包,还要安装它们的归档文件,那么可以加入标记-i(新版本已抛弃)。如何确认那些包被编译了?
- 运行
go build时候加上-x,加上-n参数可以只看具体操作不执行他们 - 运行go build的时候加上
-v,这样可以看到编译代码包的名称。
go get命令常用选项
go get 命令会自动帮我们从主流的公用代码仓库下载代码,并且将他们安装到环境变量gopath包含的第一工作区对应的目录中。
- -u : 下载并安装代码,不论工作区中是否已经存在
- -d: 只下载代码包,不安装代码包
- -fix: 在下载代码包后先运行一个用于根据当前版本GO语言的修正工具,然后再安装代码包
- -t: 同时下载测试所需的代码包
- -insecure:允许通过非安全的网络协议下载和安装代码包。HTTP 就是这样的协议。