本文主要介绍了go语言中GO路径GO ROOT的功能和设置方法,具有很好的参考价值。希望对大家有帮助。来和边肖一起看看吧。
GOPATH 和 GOROOT
与其他语言不同的是,go中没有项目,只有包,其中有两条重要的路径。GOROOT和GOPATH GOROOT是安装目录,GOPATH是我们的工作区,是用来存储包的目录。
可以设置多个GOPATHs,第一个会是默认的包目录,go get下载的所有包都在第一个路径的src目录下。当使用go install时,可执行文件将在这个包所在的GoPath下的bin目录中生成。
修改 GOPATH 和 GOROOT
如果在安装过程中没有更改设置,默认的GOROOT在C:Go中,而GOPATH将在C:usersyouNamego中,
如果我们更改go的安装位置,那么我们可能需要设置GOROOT环境变量。
打开环境变量设置,并检查以下系统变量。如果有GOROOT选项,检查它是否需要更改。如果没有,就新建一个,如图:
同样的,如果我们想添加一个工作区,我们可以直接改变GOPATH。安装go后,GOPATH将被添加到上面的用户变量中。如果没有,就像上一步那样创建一个新的。使用了多个目录;分号分隔
不管是可执行包还是不可执行包,所有东西都应该在某个$GOPATH/src下。如果这样做,那么就不会有本地包。
“导入”。/路径/包
比如你可以把你的可执行(项目)包放在某个$GOPATH/src下,比如$GOPATH/src/app/youpackagedir。
所以本地包的导入变成了
导入“app/yourpackagedir/subpackage”
这样有什么用呢?
1.你可以使用go安装你的子包,这样有利于go构建的时间。如果分包量大,会更明显。
2.可以使用go代码的自动完成。
修改后需要重启命令行工具,cmd/powershell/gitbash/Other。重启后才会生效。
补充:Go项目的环境变量GOROOT和GOPATH的设置-那些踩过的坑
那些遇到过的问题
我不知道集美在他们第一次运行围棋项目的时候会不会遇到一些奇怪的问题,但是我做到了(我自己也太擅长了)。解决这些问题往往需要半天,一天,甚至几个月的时间(其实是我留下的,只是迟早会解决)。我开始陆续整理问题和解决方法,形成了这篇文章。
import "github.com/xx/xx"出问题?
cant resolve the diectory
去get github.comxxxx,从github下载包,自动放到gopath设置的路径下。
import"golang.org/xx/xx"出问题?
无法使用Go get golang,org/xx/xx方法。Golang组织在github上建立了镜像库。下载方法如下:
首先,在gopath下创建src/golang.org/x/目录。后来也是这样下载的。例如,golang.org/x/text,拉模块代码:
git克隆https://github.com/golang/net.git
其他子包下载:
$ git克隆https://github.com/golang/tour.git
$ git克隆https://github.com/golang/net.git
$ git克隆https://github.com/golang/blog.git
$ git克隆https://github.com/golang/sync.git
$ git克隆https://github.com/golang/tools.git
$ git克隆https://github.com/golang/lint.git
设置GOROOT和GOPATH
先设置系统环境变量GOROOT应该是go sdk的安装目录。可以将GOPATH设置到需要的位置,以后go项目需要的依赖库都会存储在这个路径下。
设置GOLAND中的GOROOT和GOPATHGOROOT是go sdk的安装目录。
不需要更改GOPATH,它会自动成为系统变量。
Go模块(vgo)启用选项,请取消选中或选中它。
用命令行编译,运行go项目,包含好几个go文件
go项目文件列表如下进入go项目目录,运行go build生成exe文件。结果如下
最后,运行可执行文件
运行内部包含多个 包的go项目
上一节描述了如何通过在命令行上使用go命令来编译和运行包含多个go文件的项目。但是在实际项目中,往往会有多个包,也就是有一定的层次结构,有不同的功能(按照我的理解)。其中一些用于配置配置包,一些用于从数据模型生成数据,一些用于服务。直接在项目根目录下使用go build不太容易,有错误。一个项目的运行经常需要许多包,包括内部的和外部的。这里可以用Go mod来管理项目依赖包,非常有用。
介绍go module及区分go getGo:如果项目目录是由GOPATH设置的,代码在src目录下,然后在命令行输入:go get github.com/astaxie/beego,这样在src目录下就生成了github.com/astaxie/beego包。注意:使用GoLand工具时,将设置-go-go path-项目gopath配置为当前项目目录。
值得一提的是,如果你想在另一个位置创建一个新的go项目,你必须改变系统变量GOPATH,将其设置为新项目的位置,并可能改变goland中的GOPATH设置。很麻烦。外部依赖包都存储在同一个位置,外部依赖包没有私有的存储位置,不方便将项目移植到没有联网的电脑上。
Go mod是golang1.11之后推出的一款包依赖管理工具,用来解决之前没有地方记录依赖包具体版本的问题,方便依赖包管理。以前主要用GOPATH和vendor,Vendor相对主流,现在官方提倡go mod。[3]
Go模块(mod): Go模块只有在1.11版本之后才能使用,1.13版本之后默认关闭。首先,您需要设置环境变量。
go env -w GOPROXY=https://goproxy.io,直接
go env-w go 111 module=on set go 111 module=on
在GOPATH的目录下,新建一个项目文件夹,输入新建的路径执行gopod init,在文件夹下生成一个go.mod文件,然后将需要导入的go文件放到项目目录下,编译文件,然后将外部包下载到本地的GOPATH/pkg/mod目录下。
设置GO111MODULE=off,GOPATH模式,查找供应商和GOPATH目录。
设置GO111MODULE=auto,如果当前目录不在$GOPATH中,且当前目录(或父目录)中有go.mod文件,则使用GO111MODULE,否则仍使用GOPATH模式。
注意:使用GoLand工具时,不要将项目GOPATH配置为当前项目目录。最好配置模块GOPATH,而不是项目GOPATH [2]。在使用模块的时候,GoPath是没有意义的,但是它还是会把下载的依赖项存储在GOPATH/src/mod中,还会把go install的结果放在GOPATH/bin中(如果GOBIN不存在的话)。
相关命令[3]1.指定模块根目录并生成go.mod文件。
进入初始example.com/hello模式
2.下载并向go.mod文件添加依赖项。
去构建src/服务
去测试src/服务
3.检查模块下的所有依赖项。
转到列表-全部
4.更新稳定版本依赖关系。
去找rsc.io/sampler
5.更新到指定的版本依赖项。
go list-m-版本rsc.io/sampler
rsc.io/sampler 1 . 0 . 0版1.2.0版1.2.1版1.3.0版1.3.1版1.99.99
去找rsc.io/sampler@v1.3.1
6.清理无用的依赖项。
保持适度整洁
7.将依赖项复制到项目路径的供应商文件夹中。
go mod供应商
8.忽略缓存中的包,只使用供应商目录中的依赖项进行编译。
转到build-mod=供应商
9.验证依赖关系并查看它是否已被修改。
进行模式验证
GoLand go module 配置
使用go module,依赖包存放于GOPATH下优先级:全局路径项目路径模块路径
选中启用模块选项。
保持不变
使用vendor注意命令行并检查供应商。
type *http.Server has no field or method ProxyRemoteAddr但是下载完依赖项之后,编译的时候总有一个上诉问题,说外部依赖包中有相关变量或者方法没有定义。明明是从网上下载的依赖包,却没有自己修改。怎么会编译失败呢?
这是https://github.com/csby/wsf,的情况,这是一个问题。
后来发现在它的readme.md文件里已经解释过了:
系统提示我们对源代码进行以下更改。
根据其提示修改后,编译通过。Go项目成功运行。
我花了一天多的时间才找到这些。
命令行运行项目
项目结构
srv(配置()、数据()、枚举()、处理程序()、服务()、go.mod)
为项目添加go.mod文件。
开始模式初始化服务
将每个组件的依赖包添加到go.mod
转到构建srv/config
去构建srv/data
转到构建srv/enum
去构建SRV/服务
去运行srv/servive
以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。如有错误或不足之处,请不吝赐教。