依据 https://pmlpml.gitee.io/service-computing/post/ex-install-go/ 进行配置。
系统硬件与操作系统
系统硬件:LXC 容器形式,分配 8 CPU 核、8 GB 内存、32 G 硬盘
操作系统:Ubuntu 20.04.1 LTS
安装过程
安装 VSCode 编辑器
由于不打算给 LXC 容器部署图形界面,我们就不在这上边安装 VSCode 了。Windows 下 VSCode 安装过程不再赘述(双击安装包点点点)。
安装 golang
本体
一般我们都会采用编译安装(以获得 golang 的最新版本),但这里我们图省事(并且软件源也不算太老),就直接使用包管理器安装了。
sudo apt install golang-go# 测试一下go version
环境变量
# 创建工作空间mkdir $HOME/gowork# 临时配置环境变量,如果需要在下次打开 Bash 时也应用,则将下面两行添加到 ~/.bashrc 末尾export GOPATH=$HOME/goworkexport PATH=$PATH:$GOPATH/bin# 检查环境变量go env
创建 Hello World
# 创建源代码目录mkdir $GOPATH/src/github.com/robinWongM/go-hello -p
然后使用我喜欢的命令行文本编辑器 nano 创建一个 hello.go ,放置在刚刚创建的源代码目录下。 hello.go 内容如下:
package mainimport "fmt"func main() {fmt.Printf("hello, world\n")}
安装必要的工具和插件
Git
sudo apt install git# 测试一下git version
安装 Go 的一些工具
原文提供了一种方法,把 go get 换成 go get -d 和 go install 两步,其中 go get -d 下载的是 github.com 上对应的包源代码,以替代访问有困难的 golang.org,然后再使用本地下载好的代码进行编译安装。但以现在的网络条件去访问 github.com 也稍显困难,所以我们还是用挂代理的方式去解决该问题。
# 设置你的代理export HTTPS_PROXY=http://your-magic-proxy:port# 安装 buildutilgo get golang.org/x/tools/go/buildutil# 检查是否安装go list ... | grep buildutil
安装运行 Hello World
刚才我们已经使用 go run 去运行了 hello.go ,这次我们将使用 go install 将编译产物“安装到系统里”(其实就是复制到 $GOPATH/bin),然后在 Bash 里直接执行 go-hello 即可运行。
go install github.com/robinWongM/go-hellogo-hello
安装与运行 Go Tour
这里的 Go Tour 就是 https://tour.golang.org/ 的本地离线版本。
go get golang.org/x/tourtour

在浏览器里打开 http://127.0.0.1:3999 就可以看到离线版的 Go Tour 了。
注:这里我们使用的是远程的 LXC 容器,你可以考虑使用 VS Code Remote SSH 连接到该容器,就可以方便地设置端口转发,将 LXC 容器中的 127.0.0.1:3999 转发到本地机器的 127.0.0.1:3999,之后就可以使用浏览器打开了。或者,如果你可以直接通过 LXC 容器的 IP 去访问 LXC 容器的话,则可以更改 gotour 的源码,将监听地址改为 0.0.0.0,这样你就可以使用 http://
:3999 去访问了。
我的第一个包与测试
依据 https://go-zh.org/doc/code.html,但这篇与最新版的官方文档似乎有出入。
创建一个库并导入
前边的步骤我们已经做过了,所以直接从第一个库开始。
# 创建一个库mkdir -p $GOPATH/src/github.com/robinWongM/stringutil
然后使用我喜欢的命令行编辑器 nano 在刚才创建的目录下新建文件 reverse.go :
package stringutilfunc Reverse(s string) string {r := []rune(s)for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {r[i], r[j] = r[j], r[i]}return string(r)}
然后在那个目录下编译一下( go build )。
没有报错,我们就胜利了。然后改一下之前的 go-hello ,引入 stringutil 这个包。
package mainimport ("fmt""github.com/robinWongM/stringutil")func main() {fmt.Printf(stringutil.Reverse("!oG ,olleH"))}
现在再试一试。
go install github.com/robinWongM/go-hellogo-hello
测试
在 stringutil 目录下创建 reverse_test.go :
package stringutilimport "testing"func TestReverse(t *testing.T) {cases := []struct {in, want string}{{"Hello, world", "dlrow ,olleH"},{"", ""},}for _, c := range cases {got := Reverse(c.in)if got != c.want {t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)}}}
之后我们运行 go test github.com/robinWongM/stringutil 就可以测试了:
问题或要点小结
网络
配置 Golang 遇到的最主要的问题还是网络问题,只要配置好通畅的网络即可。
在使用软件源安装 Go 时,如果你在中山大学校园网内,那么你也可以将你的操作系统软件源配置为 Matrix 镜像站(https://mirrors.vmatrix.org.cn/),这样你可以获得极快的下载速度。配置方法依操作系统而有所不同,请参见镜像站提供的帮助文档。
在 go get golang.org/x/... 时,你也可以使用 Go Module Proxy 这一特性,通过 goproxy 镜像站(如 goproxy.io, goproxy.cn 等)去下载原先位于 golang.org 的依赖项。但这个方法不适用于 gotour(https://github.com/golang/tour/issues/761)。
相关博客链接
- 如何为命令行程序设置代理服务器
- 《安装 go 语言开发环境》https://pmlpml.gitee.io/service-computing/post/ex-install-go/
- 《干货满满的 Go Modules 和 goproxy.cn》https://juejin.im/post/6844903954879348750

