Go下载安装

官方Go下载站点:https://golang.google.cn/

下载Windows版后直接运行即可

配置环境变量

Go只需要配置两个环境变量

image-20210326084806222

  • GOROOT是Go语言的安装目录
  • GOPATH是平常使用Go语言的工作区根目录

image-20210326085017968

GOPATH是Go语言的工作目录。
go install/go get和 go的工具等会用到GOPATH环境变量。
GOPATH是作为编译后二进制的存放目的地和import包时的搜索路径。
GOPATH主要包含三个目录: binpkgsrc

  • bin:主要存放可执行文件。
  • pkg:存放编译好的库文件, 主要是*.a文件。
  • src:下主要存放go的源文件。

配置GOPROXY代理

因为众所周知的原因,使用代理才能获得更好的体验,打开power shell运行

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

在命令行输入 go env 查看目前的配置信息

image-20210326085926574

基本的配置已经完成,下面开始讲go运行编译中的坑。

工作区&非工作区

go工作区是指GOPATH中src目录下,除此以外的其它目录都是非工作区

image-20210326090719985

在任何地方可以使用go run和go build命令,无论工作区或非工作区。简单的使用不用做区分。

外部包引用

初次使用go我遇到一个问题,hello world可以编译运行,但是运行import中从github引入的包的代码时就会出错

1
cannot find package "github.com/xxxx/xxxxx" in any of:

image-20210326091656975

此时使用go get命令安装包,可以在GOPATH目录下找到包,但是运行时仍提示找不到package。经过我的研究,终于明白了go的编译原理。

1
2
PS C:\Users\94323> go env
set GO111MODULE=on

问题出在 GO111MODULE的配置上,当这个值为on时,go get下载的包在GOPATH的pkg/mod目录下,此时运行go代码还需要一个go.mod文件,帮助编译器找到包。如果没有这个文件,则会因为找不到包一直报错。

1
no required module provides package github.com/axgle/mahonia: go.mod file not found in current directory or any parent directory; see 'go help modules'

此时正确的做法是

1
2
3
4
PS D:\GitHub\GoProject\src> go mod init testname
go: creating new go.mod: module testname
go: to add module requirements and sums:
go mod tidy

testname为项目名字,可以自己设置,与go文件名或代码中的package没有关系

随后运行 go mod tidy 命令,go会自动发现代码中引入的包并下载。

image-20210326101536516

此时再查看go.mod中内容,相关外部包已经在其中

image-20210326094807747

最后运行go build,编译成功

image-20210326094855869

go.mod文件原则上是不需要手动维护的。关于go.mod的更多信息https://blog.csdn.net/weixin_39003229/article/details/97638573


当GO111MODULE的值为off时,使用go get下载的包会直接在当前目录下,并且在非工作区编译会出现诸多问题,所以推荐将GO111MODULE值设置为on。使用go mod命令管理外部包引用。

自定义包引用

从网上下载别人的代码会出现代码中引入本地自定义包,以及外部包和本地包同时引用的情况

image-20210326100942487

这时的编译方法是

1
2
3
4
PS D:\GitHub\C&C\command-control-final\server> go mod init sec-dev-in-action-src/backdoor/command-control/command-control-final/server
go: creating new go.mod: module sec-dev-in-action-src/backdoor/command-control/command-control-final/server
go: to add module requirements and sums:
go mod tidy

观察代码中引用的包名,目录结构,和我生成的go.mod module名称,相信大家一定看出其中的端倪了

之后运行go mod tidy,再次go build即可。


以上就是go语言在Windows下编译运行环境配置的详细教程了。如果有其他问题可以在下方留言。