清水泥沙

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 就是这样的协议。