配置 1.13+ 的 golang 环境(Windows 篇)

前段时间为 go 1.13 写了 《配置 1.13+ 的 golang 环境》 (注:现在go 1.14 都发布了),以区别于 1.9 还在用 GOPATH 时写的 《配置 Golang 开发环境》 。考虑到后者写了 Win 环境下的配置,于是前者就写一下 Linux 环境。

当下这个时间点,当然参考 1.13+ 那篇。可是在 Windows 配置怎么办?那就把文中系统相关的操作(主要是环境变量)换成 Win 的对应操作。两篇文章,分别涉及到了 “< 1.13 & Win” 和 “1.13+ & Linux”,看完举一反三,应该新旧版本两个系统平台,都会配置了。

结果今晚让朋友看着新教程(1.13+)配置 Win 下 go 1.13+ 环境,证明我还是太天真:这些配置教程的目标读者很可能根本没有跨平台的经验,一个 Linux 的操作在 Windows 下对应着什么,他们完全没有概念 [摊手]。

一气之下,只好再发一篇。注意,这篇 没有任何新内容,纯粹是旧文的重新组合!(Windows & go 1.13+)

不是我想水好吧,我也是被某些人气的。[摊手]

反正入门教程就不能对读者有期待,不然达不到 扔给 朋友 / 学生 之后不用管 的效果。本文遇到大段引用我其他文章的,不再只给链接,直接把内容贴过来,方便你们不用跳转,也方便我不用解释 [白眼]。

配置

重申,这篇讲 Windows 环境下,go 1.13 以上版本的配置。当下最新的是 1.14,但是配置方法没有变化。

0x00 下载安装

找下载链接请到官网 golang.org/dl ,如果国内不能访问,请直接到国内的官方镜像站 golang.google.cn/dl 。

找到 Windows 的安装包,名字大概是 go1.14.windows-amd64.msi 。后续新版本出来,版本号会变大。如果你的操作系统是 32 位,就把 amd64 换成 386 。找到符合的链接,下载。

下载完了之后安装,安装路径随你的习惯。建议尽量短,不带空格和中文。个人习惯放到 D:\Dev\go 下。

0x01 系统环境变量

然后将可执行文件加入系统路径。

如果你对 Windows 下添加系统环境变量毫无概念,建议你先搜索一下 带图的教程,毕竟 Win7 和 Win10 还有点不同。已经耐着性子水这篇,不想把这种东西展开讲。

  • 先添加 GOROOT。检查环境变量里是否已经存在 GOROOT,没有就新建,值填上一步的安装路径。以我的为例,就是 D:\Dev\go。先设置 GOROOT ,后面引用,方便以后改安装位置时只改这里,不用到处修改。

  • 再添加 PathPath 变量是原本就存在的。

    • Win10 下 Path 是个列表,新建两项,分别填 %GOROOT%\bin%USERPROFILE%\go\bin
    • Win7 等只有一个 Path 值的,修改,在最后面追加 ;%GOROOT%\bin;%USERPROFILE%\go\bin

注意涉及的标点都是英文半角符号。设置完一步步确认就好。

确认

惯例地检查一下是否配置正确

1
2
go version
go version go1.14 windows/amd64

如果不能正确执行 go version ,把当前版本输出,请回头检查哪里出错。

跟老版本不同的是,只要把 go 本身的可执行路径 和 go bin 的安装路径加入 Path 就可以了,剩下的 go env 自行管理了。

0x02 go env

执行 go env,就会看到 go 内置的环境变量,以及部分默认值。

大家看自己的输出,我的已经改过,不是默认值,就不贴了。

go env -w key=value 这样的形式,是将 key 变量修改成 value 这个值。

必改

1
2
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

GO111MODULE :

  • auto : 自 1.11 实验性加入之后就是默认值。auto 意味着由工具链自动判断是否启用 go modules。在 1.13 以前的启用条件是『项目根目录有 go.mod 且项目不在 GOPATH 内』,1.13+ 去掉了 『不在 GOPATH 内的限制』,也就是只要有 go.mod 就会启用。
  • on : 如果你觉得上面这段话太长懒得看,或者害怕以后启用条件还会变,那么 1.13 已经准备好全面启用 go modules,直接设为 on 就好了。设为 on 之后无条件启用 go modules。
  • off : 关闭 go modules,回到 GOPATH 时代。

GOPROXY :

国内环境必备,原因你懂的。甚至可以说这是新版本为中国开发者做出的最大改进之一也不为过。在 dep 的时代是靠自建的代理熬过来的,那么不会代理的朋友就很麻烦了。改用镜像就友好太多了。

目前国内最早最好的代理是 七牛云提供的 https://goproxy.cn 。如果团队内部还有搭建私有代理,可以用 , 隔开,go 会依次尝试。最后记得加上 direct ,让镜像上找不到的依赖回源查找。(包括但不限于 镜像还没同步,私有仓库 等情况)

目前自建代理的开源方案貌似有以下几个。由于我暂时没有自建代理的需要,没有实测,请自行对比选择。

推荐改

1
go env -w GOBIN=%USERPROFILE%/go/bin

GOBIN 如果没有设置,默认值为 %GOPATH%/bin ,是通过 go getgo install 安装的可执行文件的存放目录。不设并不影响使用,但考虑到 GOPATH 正在被边缘化,未来不知道哪个版本就取消了,所以建议还是单独设置一下比较好。我为了保持使用习惯,设置了跟默认相同的目录(因为 GOPATH 默认值是 %USERPROFILE%/go),区别只是这个值不依赖 GOPATH 的值。

值得 提醒 的是,这个目录也需要加入系统 PATH ,并且我已经在 系统环境变量 里加入(最后一个),如果你根据自己的习惯修改了 GOBIN 的位置,那么 0x01 里的配置也得相应修改。

更多的变量,推荐参考 《干货满满的 Go Modules 和 goproxy.cn》。

确认

到这里之后,建议安装任意一个 go 开发的工具测试 GOBIN 是否正确配置。这很重要,后续需要安装各种 go 编写的工具,并且需要在命令行调用。VSCode 的 go 插件,就依赖大量这样的工具。

如果在这里配置好了,VSCode 会自动安装到正确的地方,自动后台调用,你是几乎无感知的。

1
2
3
4
5
6
7
8
go get -u github.com/go-bindata/go-bindata/...
# 留意安装过程是否有报错
go-bindata --help
# 如果安装好了,执行目录也加入了 Path,这里应该输出帮助信息
Usage: go-bindata [options] <input directories>
...
# 或者看版本信息
go-bindata -version

0x03 cgo 和 build tool

go 语言的 cgo 特性允许 C 语言 和 go 语言互调,达到 复用已有的 C/C++ 庞大代码资源 的目的;又或者用 C 编写程序的一部分以达到某些 底层语言才能达到的目标。而要使用 cgo 特性,就需要有 C/C++ 的构建工具链 gcc

另一方面,随着项目规模变大,你会逐渐需要一个 构建工具 (build tools)帮你管理构建细节,就像 ant / maven / gradle 之于 Java。由于 go 本身的构建比较简单(或者说 go 的构建规则比较清晰,自带的 build 命令够用),又有了现成的依赖管理(之前的 vgo / glide / dep,现在官方的 go modules),官方并没有一个专用的构建工具。这部分,因为依赖管理已有,管理额外的构建细节, Makefile (make) 足矣

gcc 和 make 在多数 Linux 发行版是自带的,你可以通过 gcc -vmake -v 来确认安装的版本。即使没有,视乎不同的包管理器,也就是一两句命令的事。Windows 下稍微麻烦一些,要安装 MinGW-w64 。注意必须是 MinGW-w64 。MinGW 不兼容 64 位系统,同时长期不更新;而 w64 可以同时兼容 32 和 64 位。

下载安装

下载:https://sourceforge.net/projects/mingw-w64/

下载得到的是安装器,在选择版本后,会自动下载对应版本并安装。建议不要改动任何选项,只需要确保 Architecture 对应你的计算机即可(Win64 选 x86_64)。

安装路径依然没有强制要求,无中文和空格,尽量短即可。参考:D:\Dev\mingw-w64

创建 make 的软链接

安装完后进入 安装目录的 bin 目录,可以看到大量的工具,其中有 gcc.exemingw32-make.exe ,没有 make.exe 。其实 mingw32-make.exe 就是,但是用这个名字调用太长,也不利于其他工具用默认的名字调用,所以我们要创建一个名字叫 make.exe 的软链。

首先用管理员权限打开 cmd (右键菜单 > 用管理员权限打开),然后按如下操作:

1
2
3
4
5
# 请修改路径对应你的安装目录
C:\Windows\system32>cd /d D:\Dev\mingw-w64\bin
D:\Dev\mingw-w64\bin>mklink make.exe mingw32-make.exe
为 make.exe <<===>> mingw32-make.exe 创建的符号链接

建议创建软链之后就关掉管理员权限的 cmd,避免因权限过高造成不可恢复的误操作。后续操作在普通权限下执行即可。

完成后你会看到 bin 目录下多了一个 make.exe 文件,然后执行 dir make.exe ,会看到

1
2
D:\Dev\mingw-w64\bin>dir make.exe
2018/10/04 18:17 <SYMLINK> make.exe [mingw32-make.exe]

Path 环境变量

跟 Go 安装类似的, MinGW-w64 的 bin 目录也要追加到 Path 变量的最后,详细可以参考 Go 的 系统环境变量部分。以我的设置为例,追加的是 ;D:\Dev\mingw-w64\bin

特别强调:mingw-w64 下面还有一套 mingw32,如果是 64 位系统,添加到 PATH 的是根目录的 bin,不是 mingw32 下面的!!

1
2
3
4
5
mingw-w64
├── bin # 64位系统认准这个!!
├── mingw32
│ ├── bin # 32位系统才选这个
......

确认

1
2
3
4
gcc --version
# 正常会输出 gcc 的版本,64位:x86_64, 32位:i686; 注意区分
make -v
# 能调用就行,不需要留意位数

0x04 安装 VCS

在使用 go get 命令之前,需要安装依赖托管服务对应的 VCS (Version Control System)。go get 会根据依赖所托管的网站反馈的信息,调用对应的工具 (git / hg / svn)拉取依赖。

就我的个人实践而言,绝大多数的第三方依赖都是基于 git 发布的(或者说直接就是放在 github 上),所以 直接安装 git 就好 ,后面遇到基于其他工具的依赖,再安装不迟。

由于 git 本身就是一个大话题,基本的安装使用教程不难搜到,有时间时会另起文章讨论,这里只是提醒安装,不再展开。

0x05 开始一个项目

终于把环境都配置好了,然后就可以开始第一个 go 的项目了。由于 go modules 不再依赖 GOPATH,所以项目可以放在任何地方——这个 『任何』,是指可以不是 GOPATH ,但是要是习惯了,继续放在 %GOPATH%/src 也没问题。

好了,不管放在哪,现在新建一个项目的根目录

1
2
mkdir demo
cd demo

然后执行 go mod init <module_path> ,生成 go.mod ,这个项目就算初始化完了,接下来就该敲代码了。随着开发的进行,还会自动生成 go.sum 文件,记录依赖的校验信息。注意 go.sum 不是 lock 文件 ,重现构建的信息已经包含在 go.mod 里,go.sum 属于 checksum 文件 ,用来 确保下载的依赖没有被篡改 。 go.mod 和 go.sum 需要一起提交参与版本控制 。关于 go mod 的详细用法,可以直接 go help mod 获取帮助信息,不展开。

关于 module path 的内容,以及 module 与 package 之间的关系,篇幅所限,另有一篇文章详细解释,请看《golang 1.13 - module VS package》。

go 语法和开发,限于篇幅,也不是本文内容,后续可能需要开一个系列展开。

0x06 IDE 推荐

LiteIDE

下载:https://github.com/visualfc/liteide/releases ,根据操作系统选择对应的下载

专门为 go 设计的 IDE,简单够用。

亮点:

  • 多套环境变量、编译参数的配置,方便交叉编译
  • 支持直接搜索官方库的文档

跟下面的 IDE 比,功能不算强,因为不能扩展插件。但是胜在简洁,没有多余功能干扰。

推荐初学者从它开始,熟悉 go 的工作流程。

VSCode

声名在外,不得不说真香。不同语言的开发,我都逐渐转移到这里了。

因为太过有名,地址和配置都不用写了,一搜一大堆。

默认是不支持 go 的。胜在有个强大的插件生态,装个插件就支持了。

优点:强大的插件生态,通过增加插件和个性化配置,可以不断变得更好用。

缺点:毕竟不是原生支持,初学者上来就安装配置插件,容易一开始就搞晕。而且因为不是专门开发 go,多余的功能会造成干扰。

GoLand

IntellJ 出品,本质上是 IDEA 的一个特化版本。

口碑很好,但是因为收费,然后 VSCode 已经够用,我没有用过。

如果你觉得好用,请购买授权。如果你觉得贵,那么免费本身就有很好的选择。

身为开发者却白Piao软件,而且还不是非用不可的软件,实在是不光彩的行为。希望你不会被甲方白Piao。


知识共享 “署名-非商业性使用-相同方式共享” 4.0 (CC BY-NC-SA 4.0)”许可协议
本文为本人原创,采用知识共享 “署名-非商业性使用-相同方式共享” 4.0 (CC BY-NC-SA 4.0)”许可协议进行许可。
本作品可自由复制、传播及基于本作品进行演绎创作。如有以上需要,请留言告知,在文章开头明显位置加上署名(Jayce Chant)、原链接及许可协议信息,并明确指出修改(如有),不得用于商业用途。谢谢合作。
请点击查看协议的中文摘要。