[奔跑的 Go] 教程一、配置 Go 语言开发环境(Mac)
安装
众所周知,编程语言只不过是编译器可以理解和遵循的指令集而已(根据程序的要求进行计算/IO操作)。一门语言通常由语言规范,标准库,运行时环境和编译器构成。当你安装了 Go,他们都会随之安装进去。
因为 Go 是开源免费的,你可以使用源码安装。它也提供了编译好的二进制文件可以让你在操作系统上轻松安装。它还附带了 Windows Installer (msi) ,如果你使用的是 Windows 系统,我推荐你使用这个。 所有其他下载和相关信息可以在 golang.org上获得。
Go 安装目录
当你在系统中安装 Go 时,在 UNIX 系列系统上它会创建一个目录 /usr/local/go
对应在 Windows 上是c:/go
。然后它会将所有运行所需的必要代码和二进制文件拷贝到这个目录中。它就是 Go 里面的 命令行工具,标准库 和 编译器 的所在目录。任何时候从 Go 语言的标准库中引入包,它都会去查找该目录。
自定义安装目录
因为其他原因,你的 Go 安装目录可能与预设的目录不同,你可以使用 GOROOT
环境变量来指定它。编辑 ~/.bash_profile
文件然后增加以下内容条目。 Windows 系统上的话照这个答案做。
export GOROOT=/usr/local/custom-go
通常情况下你无需设置
GOROOT
环境变量。我强烈建议如非必要,不要去修改/使用GOROOT
变量。
Go 工作区
你可以在系统上随心所欲的创建 Go 程序。一个典型的 Go 程序就是一个以 .go
为后缀名的文本文件。你可以使用 go run hello.go
命名运行在当前目录下的名为 hello.go
的程序。
工作区是 Go 便捷管理项目的方式。一言以蔽之,它就是你系统上的一个目录,Go可以在此 查找源码 文件,管理依赖包 还有 分发二进制文件。 当 Go 程序命中 import
语句,它就会去 Go 标准库 (*$GOROOT/src*
) 中寻找响应的包。如果没找到,然后 Go 就会引用环境变量 GOPATH
,它是 Go 工作区目录的路径,然后再去 $GOPATH/src
目录下寻找这个包。
你可以按需指定多个工作区,只要你保证 GOPATH
环境变量指向你的工作区目录即可。
类似
$GOROOT
,$GOPATH
在 UNIX 中默认指向$HOME/go
目录,在 windows 上默认指向%USERPROFILE%\go
。 所以,去设置GOPATH
环境变量也非必要步骤。
工作区目录结构
一个 Go 工作区目录必须有三个子目录也就是: src
, pkg
and bin
。 如果你想设置 Go workspace,按照 this 文档进行操作。 如果你正在使用 MacOS,你可以按照 this 中的文章来临时或永久地设置环境变量。
↪ src
src 目录包含 Package. Package 包括一个包含 Go 源代码 (*.go*
files) 。 任何使用 'go get' 命令安装的包也将驻留在这里 (及其依赖包)。
在 Go 中,每个程序都包含在一个包中。 因此,无论何时您将使用新的 Go 项目,您都需要在 $GOPATH/src
中创建新目录并向上工作。
↪ pkg
pkg 目录包含 Go 包对象。 它们是原始包源代码的编译版本,并且他们以 .a
作为文件扩展名 *(a 代表 存档)*。这些文件包含已编译的包二进制代码,以及调试符号和源信息。 包对象是 为机器体系结构和 Go 版本定制的。 这些文件是在构建/安装软件包时,使用 Go pack 工具创建的。
无论何时安装第三方软件包,软件包对象的软件包名称。包名.a
是为这个目录中的包创建的。
在 Go 中,通常使用 import "<包名>"
或 import "<main/子包>"
syntax 导入包 (就像 ES6 语法) 。 通常,Go 在 $GOROOT/src
或 $GOPATH/src
目录中查找这些包。 但是,如果它发现预编译的包对象与导入的包关联,那么 Go 将使用它。
包对象是针对特定平台编译和归档的文件。 因此,您将在 pkg 目录中看到 platform architecture 目录。
使用包对象的好处是省去了编译时间。所谓一个包,其实就是一些 Go 程序的集合,main 函数(引用包的函数)每运行一次,都需要把所有引用的包编译一次。然而,如果把编译好的包以对象的形式存储在 pkg 目录里,就不需要再次编译了。
因此,当你引用 foo/bar
包时,它是在执行 $GOPATH/pkg/{arch}/foo/bar.a
文件,而不是 $GOPATH/src/foo/bar/*.go
( 如果是 Go 的标准库包,应该是 `$GOROOT` ,而不是 `$GOPATH` )。
在 non-main 上执行
go install
命令就可以创建包对象。关于 main 和 non-main 包的区别会在关于包的课程中讲解。 包对象也被称作缓存对象,或缓存包。
↪ bin
Go程序既可以当作工具包来使用,也可以用于执行某些操作。上文中,已经对其工具包的用法及目录结构做了大致的介绍。
Go 还可以执行一些操作任务,比如 请求网络,读写文件 等。要完成这些操作,首先需要把代码编译,这样计算机才知道要执行哪些操作。当执行 go run hello.go
命令时,Go 编译器会首先编译 hello.go
文件,然后执行里面的二进制代码。
Go 程序支持输出二进制文件,执行 go build <package-name>
( main 包 ) 或 go build program/path.go
命令即可在当前文件夹创建二进制文件。
(go build 命令)
bin 目录包含同样的二进制可执行文件。执行 go install
命令就可以创建这些文件。 go install
命令会触发底层的 go build
命令,然后将这些文件保存到 bin 目录中。通常情况下,这个目录是在系统的可执行路径中。因此,这个目录中的所有文件都是可以通过终端来操作的。
go install
命令也会为编译程序中所有引入的包创建 包对象 。大家可以从 这里 了解更多关于go build
和go install
命令的区别。
GOBIN
是go install
命令创建的另一个环境变量,也用于存放二进制文件。默认情况下,GOBIN
就是$GOPATH/bin
,但是你也可以将它设置成任何路径。
概述
Go 工作区的真意在于更加方便的管理项目,依赖以及分发。切换 Go 工作区是很容易的,因此我通常每个项目都建一个 Go 工作区,然后临时更改 $GOPATH
环境变量快速切换工作区。
1. 设置环境变量
export GOPATH=/Users/Uday.Hiwarale/uday-gh/go_workspaces/main
export GOBIN=$GOPATH/bin
PATH=$PATH:$GOPATH:$GOBIN
export PATH
设置 GOBIN
环境变量并非必须的,但是因为一个工作区的 bin
目录应该在我们的 PATH
之下,所以设置一下是个明智之选。
2. 确认 $GOPATH
和 $GOBIN
已设置
如上所言,我们无需设置 GOROOT
环境变量,因为我们使用默认的安装目录 (在 macOS = */usr/local/go*
).
3. 安装第三方包
该命令将会从 GitHub 仓库中拉取源码并放置在 $GOPATH/src
中。它也会下载与 gorm
相关的依赖包并安装在src
目录中。
包和依赖下载之后,Go 将会编译包并在 $GOPATH/pkg
中与包相同结构的目录下创建一个包目标文件。
4. 创建二进制文件
无所谓你从哪里执行 go install shape
命令,Go 知道 shape
包在何处(从*GOPATH*
环境变量可知) 。故而,二进制文件在 bin
目录中生成。因为,这个 bin
目录在我们的 PATH
之下,我们可以将这些二进制文件以 文件名作为命令来执行。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: