开发环境
1 - 安装 golang
1.1 - 下载golang
下载
下载地址:
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
nexus 仓库类型
默认情况下 nexus 只支持 golang 的 proxy 和 group 类型的仓库,没有 hosted 类型的仓库:
从下面的官方文档
得知:
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-official: https://proxy.golang.org
- go-proxy-official-io: https://goproxy.io/
- go-proxy-cn: https://goproxy.cn
其他备选(暂时不用):
- go-proxy-aliyun: https://mirrors.aliyun.com/goproxy/
- go-proxy-tencent: https://mirrors.cloud.tencent.com/go/
- go-proxy-ustc: https://goproxy.cn
再新建一个名为 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安装
卸载旧版本
如果发现安装有旧版本,会要求先卸载旧版本再继续安装。
备注:不知道为什么,删除旧版本文件的过程非常的慢。
更新:遇到安装完成后,执行 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安装
首先删除之前已经安装的版本 :
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 - 设置
设置 GOPROXY
查看默认的 goproxy 设置:
$ go env GOPROXY
https://proxy.golang.org,direct
设置环境变量 GOPROXY 来设置 go module 公共代理仓库,代理并缓存go模块,以加速构建。
# golang
......
export GOPROXY="https://goproxy.cn,direct"
可用的 goproxy 有:
- 七牛:“https://goproxy.cn,direct”
- 阿里云:“https://mirrors.aliyun.com/goproxy/,direct"
- 官方(有全球 CDN 加速):“https://goproxy.io,direct”
对于通过 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配置
2.1 - VS Code 配置
extensions
ctrl + shift + x
打开 vs code 的 extension 设置。
安装 go extension
工具软件
Ctrl + Shift + P
打开命令面板,输入 Go: Install/Update Tools
,然后勾选所有推荐的工具开始安装。