go 语言开发环境搭建
如果你是2022年开始学go的,恭喜,基本不需要任何配置,安装go语言后就可以开箱即用go语言开发环境。
以下基于Windows + VSCode搭建go语言开发环境。
下载安装go语言
官方下载地址: https://go.dev
安装说明如下: https://go.dev/doc/install

如果是Windows系统, 直接下载msi 的安装包安装,会自动设置环境变量。
测试安装
PS C:\Users\lenovo> go version
go version go1.18.4 windows/amd64
查看帮助
PS C:\Users\lenovo> go help
Go is a tool for managing Go source code.
Usage:
go <command> [arguments]
The commands are:
bug start a bug report
build compile packages and dependencies
clean remove object files and cached files
doc show documentation for package or symbol
env print Go environment information
fix update packages to use new APIs
fmt gofmt (reformat) package sources
generate generate Go files by processing source
get add dependencies to current module and install them
install compile and install packages and dependencies
list list packages or modules
mod module maintenance
work workspace maintenance
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet report likely mistakes in packages
Use "go help <command>" for more information about a command.
Additional help topics:
buildconstraint build constraints
buildmode build modes
c calling between Go and C
cache build and test caching
environment environment variables
filetype file types
go.mod the go.mod file
gopath GOPATH environment variable
gopath-get legacy GOPATH go get
goproxy module proxy protocol
importpath import path syntax
modules modules, module versions, and more
module-get module-aware go get
module-auth module authentication using go.sum
packages package lists and patterns
private configuration for downloading non-public code
testflag testing flags
testfunc testing functions
vcs controlling version control with GOVCS
Use "go help <topic>" for more information about that topic.
具体命令见后续。
go env
查看go语言环境变量等信息
PS C:\Users\lenovo> go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\lenovo\AppData\Local\go-build
set GOENV=C:\Users\lenovo\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\lenovo\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\lenovo\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.18.4
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\lenovo\AppData\Local\Temp\go-build3893195504=/tmp/go-build -gno-record-gcc-switches
其中几个重要的变量含义如下:
GOROOT
GOROOT就是Go的安装目录
GOPATH
GOPATH是我们的工作空间,保存go项目代码和第三方依赖包。
GOPATH可以设置多个,其中,第一个将会是默认的包目录。
使用 go get 下载的包都会在第一个path中的src目录下
使用 go install时,在哪个GOPATH中找到了这个包,就会在哪个GOPATH下的bin目录生成可执行文件
GO111MODULE
一开始go发布的时候是没有包管理的,也没有版本的概念,master
就代表稳定的版本。
go get命令会根据路径,把相应的模块获取并保存在 $GOPATH/src
::: tip
Go 1.11 引入了 Go 模块。
就有了GO111MODULE 这个环境变量,可以在使用 Go 或者更改 Go 导入包的方式时候设置。
:::
Go Modules
不使用 GOPATH 存储每个软件包的单个 git checkout,而是存储带有 go.mod
标记版本的标记版本,并跟踪每个软件包的版本。
⚡️ 有三个取值:
- on: 即使项目在GOPATH 中,GO111MODULE = on 仍将强制使用 Go 模块 ,需要 go.mod 才能正常工作。
- off:强制 Go 表现出 GOPATH 方式,即使你的项目不在 GOPATH 目录里(不推荐)。
- auto: Go 1.13开始是默认模式。
对于默认模式,当存在 go.mod 文件时或处于 GOPATH 外, 其行为均会等同于 GO111MODULE=on。当项目目录处于 GOPATH 内,且没有 go.mod 文件存在时其行为会等同于 GO111MODULE=off。
在Go 1.16中,GO111MODULE默认是开启状态。
一个module就是一组包的集合,即go.mod文件所在目录下定义的所有的包都属于这个模块。
go.mod文件定义了模块的路径path,这个路径是用于import的路径以及编译时该模块依赖于其他模块的需求。
该模块依赖的模块通过模块路径 + 语义化的版本号的格式添加到go.mod中。
::: danger
后续所有的学习都是基于 go.mod
的
:::
GOMODCACHE
模块缓存。
模块缓存是 go
命令存储下载模块文件的目录。
默认模块位置是 $GOPATH/pkg/mod
使用 Go Modules
时,在 go build
期间使用的包存储在 $GOPATH/pkg/mod
中。
GOPROXY
从Go 1.13开始,Go Module作为Golang中的标准包管理器,在安装时自动启用,并附带一个默认的GOPROXY。
GOPROXY控制Go Module下载的来源,有助于确保构建的确定性和安全性。
GOPROXY默认为 https://proxy.golang.org,direct
由于网络的原因,可能导致下载比较慢,我们可以配置为goproxy.io。
网址:GOPROXY.IO - 一个全球代理 为 Go 模块而生
# ----------------- Bash (Linux or macOS)
# 配置 GOPROXY 环境变量
export GOPROXY=https://proxy.golang.com.cn,direct
# 还可以设置不走 proxy 的私有仓库或组,多个用逗号相隔(可选)
export GOPRIVATE=git.mycompany.com,github.com/my/private
# ----------------- PowerShell (Windows)
# 配置 GOPROXY 环境变量, 官网文档首页有错误
$env:GOPROXY = "https://proxy.golang.com.cn,direct"
# 还可以设置不走 proxy 的私有仓库或组,多个用逗号相隔(可选)
$env:GOPRIVATE=git.mycompany.com,github.com/my/private
# ------------- 如果需要长期有效,可以如下操作,Windows为例:
1. 右键 我的电脑 -> 属性 -> 高级系统设置 -> 环境变量
2. 在 “[你的用户名]的用户变量” 中点击 ”新建“ 按钮
3. 在 “变量名” 输入框并新增 “GOPROXY”
4. 在对应的 “变量值” 输入框中新增 “https://proxy.golang.com.cn,direct”
5. 最后点击 “确定” 按钮保存设置
常用命令
go get
该命令可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包。
go get -u "github.com/VictoriaMetrics/fastcache"
go build
该命令用于编译我们指定的源码文件或代码包以及它们的依赖包。
go install
该命令用于编译并安装指定的代码包及它们的依赖包。
go install命令只比go build命令多做了一件事,即:安装编译后的结果文件到指定目录。
go run
该命令可以运行命令源码文件,只能接受一个命令源码文件以及若干个库源码文件(必须同属于 main
包)作为文件参数,且不能接受测试源码文件。
go clean
该命令会删除掉执行其它命令时产生的一些文件和目录。
go list
该命令的作用是列出指定的代码包的信息。
go mod init
该命令初始化并写入一个新的go.mod至当前目录中,实际上是创建一个以当前目录为根的新模块。文件go.mod必须不存在。
go mod init demo
::: tip
完整命令可以参考官方文档或:Golang常用工具分享 - 腾讯云开发者社区-腾讯云 (tencent.com)
:::
Vscode 安装go扩展
安装以下扩展即可。
Hello world
mkdir helloworld
cd helloworld
> go mod init helloworld
go: creating new go.mod: module helloworld
通过以上命令,即初始化了一个hello world 项目。
接下来,我们就可以创建第一个go程序了。
go语言程序的扩展名为 .go
,我们创建一个 hello.go
,输入以下内容:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
在终端,运行以下命令:
> go run .\hello.go
Hello, World!
恭喜!现在开始go语言的学习吧。