为想尝试 Go 的朋友开个头,介绍环境的配置。语言的优缺点不在此展开。
因身边多数使用 Win64 环境,以下无特殊说明均以 Win64 为例,日后有需要再补充其他平台部分。
1. Go
- 下载:https://golang.org/dl/ (out of wall)
- 版本:1.9+,一般下载最新版本即可
1.1 安装
访问官网下载页面,获取对应版本。不过如果你不懂得翻-墙,会发现访问不了官网,因为它在 Google 的服务器上。这点请自行解决。不过经过 PuTTY 和 iOS SDK 第三方下载被植入木马的事件,劝各位还是努力到官网下载。
Win64 的安装文件一般为 go1.xx.y.windows-amd64.msi
,下载好后安装,路径默认或自定义,没有强制要求,不要出现中文和空格,尽量短一些即可。个人路径供参考: D:\Dev\Go
。
1.2 环境变量
安装后设置环境变量,指定 官方工具包(及内置库) 和 工作目录。
以下设置均在:我的电脑(Win10 此电脑) > 右键菜单 > 属性 > 高级系统设置 > 环境变量
, 如果变量存在就确认内容,不存在就新建。
1.2.1 GOROOT
指定 Go 的安装目录,并以此确定工具包和内置库的位置。确保 GOROOT
指向 Go 的安装目录 (例: D:\Dev\Go
)。
1.2.2 GOPATH
指定 Go 的 workspace(工作目录)。GOPATH
允许指定多个 workspace,中间以 ;
隔开(跟 PATH
类似,其他平台下的分隔符是 :
)。可以在任意一个 workspace 下开发,但是 go get
和 go install
的包只会放在第一个目录。当引用包的时候,会先查找 %GOROOT%\pkg
的语言内置包,再顺序查找每个 workspace 的 src
目录,找到就结束。
一般情况下,推荐设置两个 workspace : 第一个存放下载的第三方依赖包,第二个存放本地开发的代码,分开避免混淆。例:C:\Users\Jayce\go;E:\workspace\go
。
1.2.3 PATH
PATH
是系统自带的执行路径,所以我们不能覆盖它,只能在后面追加。需要将GOROOT 的 bin 目录 和 第一个 workspace 的 bin 目录加入 PATH ,以调用 官方工具包 和 安装的第三方工具。其中如果你检查 GOROOT 的时候发现 GOROOT 已经配置好了,有可能 %GOROOT%\bin
也已经添加了,你可以复制到记事本里检查一下。
假定两个都没有添加,那么以上述 GOPATH
的配置为例,则是 原来的PATH内容;%GOROOT%\bin;C:\Users\Jayce\go\bin
注:Win10 对 PATH 的管理进行了优化,不再是一长串用 ;
分隔的路径,而是一个路径的列表,追加时只需新建子项即可。
1.3 验证
打开 cmd,然后按如下操作
|
|
2. gcc 和 make
有时部分依赖包以 C 开发,需要用到 gcc 编译;另外,为简化编译流程,项目规模增大后会逐渐交由 make 管理编译。两个工具在 Linux 下一般自带,或通过系统的包管理很轻易地安装,Windows 下则要安装 MinGW-w64 。注意必须是 MinGW-w64 。MinGW 不兼容 64 位系统,同时长期不更新;而 w64 可以同时兼容 32 和 64 位。
2.1 安装
下载得到的是安装器,在选择版本后,会自动下载对应版本并安装。建议不要改动任何选项,只需要确保 Architecture 对应你的计算机即可(Win64 选 x86_64)。
安装路径依然没有强制要求,无中文和空格,尽量短即可。参考:D:\Dev\mingw-w64
。
2.2 创建 make 的软链接
安装完后进入 安装目录的 bin 目录,可以看到大量的工具,其中有 gcc.exe
和 mingw32-make.exe
,没有 make.exe
。其实 mingw32-make.exe
就是,但是用这个名字调用太长,也不利于其他工具用默认的名字调用,所以我们要创建一个名字叫 make.exe
的软链。
首先用管理员权限打开 cmd (右键菜单 > 用管理员权限打开),然后按如下操作:
|
|
建议创建软链之后就关掉管理员权限的 cmd,避免因权限过高造成不可恢复的误操作。后续操作在普通权限下执行即可。
完成后你会看到 bin 目录下多了一个 make.exe
文件,然后执行 dir make.exe
,会看到
|
|
2.3 PATH 环境变量
跟 Go 安装类似的, bin 目录也要追加到 PATH 目录的最后,详细可以参考 1.2.3 Go 的 PATH 环境变量部分。
特别强调:mingw-w64 下面还有一套 mingw32,添加到 PATH 的是根目录的 bin,不是 mingw32 下面的!!
|
|
2.4 验证
|
|
3. 项目包管理及编译
3.0 预备知识:Go 的目录结构与包管理
每个 workspace 下都有三个指定用途的目录,用到的时候如果不存在,会自动创建:
|
|
其中 go get
获得的 src 和 go install
获得的 bin ,会放在第一个 workspace 中,所以建议至少添加两个 workspace,并在第二个进行本地开发,避免混淆。
Go 语言引用包时,需要在代码开头 import 对应包的路径(非包名,虽然路径的最后一层目录往往跟包名一样,但也可以不一样):
|
|
全局路径的 import
- 先在
%GOROOT%\pkg
查找内置的包(已编译,所以引用 pkg) - 再在每个 workspace 的 src 目录查找
- 在 1.6 版本后新增了项目根目录下的 vendor 目录,可以通过依赖管理工具拷贝特定版本的依赖,方便锁定依赖的版本,并随项目源码一起提交。
使用了 local import 的包,不能被别的包 import,所以在正式项目中基本是禁止使用的。那么需要被引用的包只能存放在 src 或者 vendor 中。
跟 Java 相比最大的差别就是, 项目的根目录不在 import 的搜索范围内 。Java 项目内的包,包名(跟路径对应)不包括项目名,从根目录下开始算;Go 没有项目本地包的概念,都是全局 import,包路径从 src 下开始算,所以项目根目录名也是包路径的一部分。由此得出结论:
- Go 项目必须在 workspace 的 src 目录下开发
- 根目录 名字确定后就不能随意更改 ,否则项目内的互相 import 都得改
3.1 包管理
有了上述知识准备,接下来的内容就容易理解了。
- git clone 必须在 (第二个) workspace 的 src 目录进行 (后续要新建项目同理)。
- 项目名(例:myproj) 需要跟 import 路径 (
import myproj/xxx/yyy
) 保持一致,新建项目时就要考虑,clone 之后不能修改目录名。 - 推荐使用官方的依赖管理工具 dep,所有第三方依赖都会拷贝到 vendor 跟源码一起管理,clone 后不需
go get
对应的依赖。
3.2 编译
在确保做好包管理的基础上,编译就很简单了,在根目录打开 cmd:
|
|
即可。
(后续项目复杂度增加后,编译建议交给 make 管理。)
4. IDE
LiteIDE:LiteIDE is a simple, open source, cross-platform Go IDE
国人开发的开源跨平台 IDE,简单,免费,够用。
GoLand:A Clever IDE to Go by JetBrains
IDE 名门 JetBrains 出品,口碑很好,就是要付费。
Visual Studio Code:Code Editing. Redefined
传统软件巨头微软拥抱开源之后的 开源 IDE ,热度很高;并非专门为 Go 设计,但提供相关插件。
视乎你更习惯哪个 IDE,看你自己喜欢。
5. 其他工具
- bindata:将资源文件编译成 go 源码,参与编译。(类似 Android 下的 R.java)
- dep:Go 官方依赖管理工具,将指定版本的第三方依赖拷贝到 vendor 目录,跟源码一起管理。
本文为本人原创,采用知识共享 “署名-非商业性使用-相同方式共享” 4.0 (CC BY-NC-SA 4.0)”许可协议进行许可。
本作品可自由复制、传播及基于本作品进行演绎创作。如有以上需要,请留言告知,在文章开头明显位置加上署名(Jayce Chant)、原链接及许可协议信息,并明确指出修改(如有),不得用于商业用途。谢谢合作。
详情请点击查看协议具体内容。