这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

开发环境

搭建 Golang 开发环境

1 - 安装 golang

在各个平台上安装和配置 golang

1.1 - 下载golang

下载 golang 的安装文件

下载

下载地址:

https://go.dev/dl/

windows 选择 msi 安装文件:

https://go.dev/dl/go1.24.2.windows-amd64.msi

linux 下选择 tar.gz 压缩文件:

wget https://go.dev/dl/go1.24.2.linux-amd64.tar.gz

版本一般选最新。

准备gopath

gopath 是 golang 的 workspace,用于存放项目代码和依赖。

mkdir -p $HOME/work/soft/gopath/

1.2 - nexus

为 golang 项目添加 nexus 的代理

nexus 仓库类型

默认情况下 nexus 只支持 golang 的 proxy 和 group 类型的仓库,没有 hosted 类型的仓库:

create-golang-repository

从下面的官方文档

https://help.sonatype.com/en/go-repositories.html#configuring-a-go-project-in-sonatype-nexus-repository

得知:

You can serve and cache modules remotely from resources such as GitHub. Currently, hosted repositories aren’t available.

您可以从 GitHub 等资源远程提供和缓存模块。目前,hosted 存储库不可用。

配置 go proxy 仓库

创建新的 go proxy 仓库:

注意:取消勾选 Cache responses for content not present in the proxied repository 选项。

多建几个 proxy 仓库:

其他备选(暂时不用):

再新建一个名为 go-proxy-all 的 group 类型的仓库,将上述 proxy 仓库添加进去,顺序为:

  • go-proxy-cn
  • go-proxy-official-io
  • go-proxy-official

记录此时仓库的地址备用,如:

http://192.168.0.246:8081/repository/go-proxy-all/

验证

备注: 在设置好 goproxy 之后再验证

mkdir -p ~/work/code/temp/go-demo
cd ~/work/code/temp/go-demo

git clone https://github.com/gobuffalo/buffalo

cd buffalo
go build

以下为输出:

go: downloading github.com/dustin/go-humanize v1.0.1
go: downloading github.com/gobuffalo/envy v1.10.2
go: downloading github.com/gobuffalo/events v1.4.3
go: downloading github.com/gobuffalo/flect v1.0.0
go: downloading github.com/gobuffalo/grift v1.5.2
go: downloading github.com/gobuffalo/logger v1.0.7
go: downloading github.com/gobuffalo/plush/v4 v4.1.18
go: downloading github.com/gobuffalo/refresh v1.13.3
go: downloading github.com/gorilla/handlers v1.5.1
go: downloading github.com/gorilla/mux v1.8.0
go: downloading github.com/gorilla/sessions v1.2.1
go: downloading github.com/gobuffalo/nulls v0.4.2
go: downloading github.com/monoculum/formam v3.5.5+incompatible
go: downloading github.com/sirupsen/logrus v1.9.0
go: downloading github.com/gobuffalo/meta v0.3.3
go: downloading github.com/spf13/cobra v1.6.1
go: downloading github.com/gobuffalo/github_flavored_markdown v1.1.3
go: downloading github.com/gobuffalo/helpers v0.6.7
go: downloading github.com/gobuffalo/tags/v3 v3.1.4
go: downloading golang.org/x/text v0.6.0
go: downloading github.com/joho/godotenv v1.4.0
go: downloading github.com/rogpeppe/go-internal v1.9.0
go: downloading github.com/felixge/httpsnoop v1.0.1
go: downloading golang.org/x/term v0.0.0-20220722155259-a9ba230a4035
go: downloading github.com/gorilla/securecookie v1.1.1
go: downloading github.com/BurntSushi/toml v1.2.1
go: downloading github.com/gofrs/uuid v4.2.0+incompatible
go: downloading golang.org/x/sys v0.0.0-20220908164124-27713097b956
go: downloading github.com/spf13/pflag v1.0.5
go: downloading github.com/microcosm-cc/bluemonday v1.0.20
go: downloading github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d
go: downloading github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e
go: downloading golang.org/x/net v0.0.0-20221002022538-bcab6841153b
go: downloading github.com/fatih/color v1.13.0
go: downloading github.com/fsnotify/fsnotify v1.6.0
go: downloading github.com/mitchellh/go-homedir v1.1.0
go: downloading gopkg.in/yaml.v3 v3.0.1
go: downloading github.com/fatih/structs v1.1.0
go: downloading github.com/gobuffalo/validate/v3 v3.3.3
go: downloading github.com/sergi/go-diff v1.2.0
go: downloading github.com/mattn/go-colorable v0.1.9
go: downloading github.com/mattn/go-isatty v0.0.14
go: downloading github.com/aymerick/douceur v0.2.0
go: downloading github.com/gorilla/css v1.0.0

此时本地 gopath 目录下能看到这些已经下载的 go module:

$ ls /home/sky/work/soft/gopath/pkg/mod/github.com 

 aymerick        felixge     gorilla        mitchellh   sirupsen
'!burnt!sushi'   fsnotify    joho           monoculum   sourcegraph
 dustin          gobuffalo   mattn          rogpeppe    spf13
 fatih           gofrs       microcosm-cc   sergi

打开 nexus,浏览 go-proxy-all 仓库地址,能看到这些 go module 已经被缓存:

打开顺序排在第一位的 go-proxy-cn 仓库,也能看到这些 go module 已经被缓存:

而排在顺序第二和第三位的代理仓库,则为空:

这说明 go group 类型的仓库,会按照添加的顺序,依次查找缓存的 go module,如果找到,则使用,否则继续查找下一个,直到找到或者查找完所有仓库。

1.3 - windows安装

在 windows 上安装 golang

卸载旧版本

如果发现安装有旧版本,会要求先卸载旧版本再继续安装。

备注:不知道为什么,删除旧版本文件的过程非常的慢。

更新:遇到安装完成后,执行 go install 命令时报错:

\xxx\map.go xxxxx mapiterinit redeclared in this block

后来发现先在 windows 的 app 列表中卸载 golang 后,重新安装 golang,问题解决。

因此,强烈建议先手工卸载旧版本,再安装新版本。

安装

运行下载下来的 go1.24.0.windows-amd64.msi 安装文件。

安装过程中需要设置安装路径,我一般不喜欢用默认的 Program Files 路径,通常设置为:D:\sky\work\soft\golang\

安装完成后,打开 cmd 验证一下:

$ go version

go version go1.24.0 windows/amd64

打开 gitbash,检查:

$ go version
go version go1.24.0 windows/amd64

$ which go
/d/sky/work/soft/golang/bin/go

设置环境变量:

  • GOPATH=D:\sky\work\soft\gopath\

  • GOROOT=D:\sky\work\soft\golang\

修改环境变量(用户变量)Path,增加内容 %GOPATH%\bin%GOROOT%\bin

验证环境变量是否生效:

$ env | grep -E 'GOPATH|GOROOT'
GOROOT=D:\sky\work\soft\golang\
GOPATH=D:\sky\work\soft\gopath\

$ go env GOPATH
D:\sky\work\soft\gopath\

$ go env GOROOT
D:\sky\work\soft\golang\

$ echo $PATH

1.4 - linux安装

在 linux 上安装 golang

首先删除之前已经安装的版本 :

sudo rm -rf /usr/local/go

解压缩下载下来的 go1.xx.0.linux-amd64.tar.gz 文件:

sudo tar -C /usr/local -xzf go1.24.2.linux-amd64.tar.gz

设置 GOROOT / GOPATH 然后将 GOROOT/bin 和 GOPATH/bin 加入到 PATH:

# golang
export GOROOT=/usr/local/go
export GOPATH=/home/sky/work/soft/gopath
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH

执行 go version / go env 等检验。

$ go version
go version go1.24.2 linux/amd64

1.5 - 设置

golang 安装完成后的设置

设置 GOPROXY

查看默认的 goproxy 设置:

$ go env GOPROXY
https://proxy.golang.org,direct

设置环境变量 GOPROXY 来设置 go module 公共代理仓库,代理并缓存go模块,以加速构建。

# golang
......
export GOPROXY="https://goproxy.cn,direct"

可用的 goproxy 有:

对于通过 nexus 建立了本地代理仓库的情况,设置为本地代理仓库的地址,如:

export GOPROXY="http://192.168.0.246:8081/repository/go-proxy-all/,direct"

设置私有模块

查看默认的 GOPRIVATE 设置,默认为空:

$ go env GOPRIVATE

可以通过设置 GOPRIVATE 环境变量来控制私有仓库、依赖等 (如公司内部仓库) 不通过 goproxy 拉取,而是走本地:

# 设置不走 goproxy 的私有仓库
# 如果有多个则用逗号分隔
export GOPRIVATE=*.someone.com

设置 GOSUMDB

查看默认的 GOSUMDB 设置:

$ go env GOSUMDB
sum.golang.org

如果遇到 GOSUMDB sum.golang.org 连接超时,则需要设置 GOSUMDB:

# 设置不走 goproxy 的私有仓库
# 如果有多个则用逗号分隔
export GOSUMDB=sum.golang.google.cn

参考:https://learnku.com/go/wikis/66836

2 - IDE配置

在各个 IDE 中配置 golang

2.1 - VS Code 配置

在 VS Code 中配置 golang

extensions

ctrl + shift + x 打开 vs code 的 extension 设置。

安装 go extension

工具软件

Ctrl + Shift + P 打开命令面板,输入 Go: Install/Update Tools,然后勾选所有推荐的工具开始安装。