Go语言windows编译环境配置详解
Go下载安装
官方Go下载站点:https://golang.google.cn/
下载Windows版后直接运行即可
配置环境变量
Go只需要配置两个环境变量
- GOROOT是Go语言的安装目录
- GOPATH是平常使用Go语言的工作区根目录
GOPATH
是Go语言的工作目录。
go install/go get和 go的工具等会用到GOPATH环境变量。
GOPATH是作为编译后二进制的存放目的地和import包时的搜索路径。
GOPATH主要包含三个目录: bin
、pkg
、src
- bin:主要存放可执行文件。
- pkg:存放编译好的库文件, 主要是*.a文件。
- src:下主要存放go的源文件。
配置GOPROXY代理
因为众所周知的原因,使用代理才能获得更好的体验,打开power shell运行
1 | go env -w GOPROXY=https://goproxy.cn,direct |
在命令行输入 go env 查看目前的配置信息
基本的配置已经完成,下面开始讲go运行编译中的坑。
工作区&非工作区
go工作区是指GOPATH中src目录下,除此以外的其它目录都是非工作区
在任何地方可以使用go run和go build命令,无论工作区或非工作区。简单的使用不用做区分。
外部包引用
初次使用go我遇到一个问题,hello world可以编译运行,但是运行import中从github引入的包的代码时就会出错
1 | cannot find package "github.com/xxxx/xxxxx" in any of: |
此时使用go get命令安装包,可以在GOPATH目录下找到包,但是运行时仍提示找不到package。经过我的研究,终于明白了go的编译原理。
1 | PS C:\Users\94323> go env |
问题出在 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 | PS D:\GitHub\GoProject\src> go mod init testname |
testname为项目名字,可以自己设置,与go文件名或代码中的package没有关系
随后运行 go mod tidy 命令,go会自动发现代码中引入的包并下载。
此时再查看go.mod中内容,相关外部包已经在其中
最后运行go build,编译成功
go.mod文件原则上是不需要手动维护的。关于go.mod的更多信息https://blog.csdn.net/weixin_39003229/article/details/97638573
当GO111MODULE的值为off时,使用go get下载的包会直接在当前目录下,并且在非工作区编译会出现诸多问题,所以推荐将GO111MODULE值设置为on。使用go mod命令管理外部包引用。
自定义包引用
从网上下载别人的代码会出现代码中引入本地自定义包,以及外部包和本地包同时引用的情况
这时的编译方法是
1 | 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.mod module名称,相信大家一定看出其中的端倪了
之后运行go mod tidy,再次go build即可。
以上就是go语言在Windows下编译运行环境配置的详细教程了。如果有其他问题可以在下方留言。