golang中gopath的介绍
这篇文章主要介绍了golang中gopath工具,具有一定借鉴价值,需要的朋友可以参考下。如下资料是关于gopath的详细步骤内容。
前言在本章中,我们将介绍go语言的项目结构、项目管理以及依赖管理。在本文中,我们关注gopath
在go语言开发环境配置文章中,我们介绍了配置gopath
与goroot
环境变量的步骤,但是并没有对其进行深入解释。可以在终端输入 go env
或者go env gopath
查看具体的配置
C:\Windows\system32>goenv
setGO111MODULE=
setGOARCH=amd64
setGOBIN=
setGOCACHE=C:\Users\jackson\AppData\Local\go-build
setGOENV=C:\Users\jackson\AppData\Roaming\go\env
setGOEXE=.exe
setGOFLAGS=
setGOHOSTARCH=amd64
setGOHOSTOS=windows
setGONOPROXY=
setGONOSUMDB=
setGOOS=windows
setGOPATH=C:\Users\jackson\go
setGOPRIVATE=
setGOPROXY=https://proxy.golang.org,direct
setGOROOT=c:\go
...
在go1.8之后,如果不指定gopath,则gopath是默认的。
在mac,linux下为$HOME/go
windows 下为%USERPROFILE%\g
gopath
可以理解为go语言的工作空间,内部存储了src
,bin
,pkg
三个文件夹
go/
├──bin
├──pkg
└──src
$GOPATH/bin
目录存储了通过go install
安装的二进制文件。操作系统使用PATH变量中
$GOPATH/pkg
目录中,会存储预编译的obj文件(文件名根据操作系统的不同而不同,例如mac下为darwin_amd64
),以加快程序的后续编译。大多数开发人员不需要访问此目录。后面还会介绍,pkg下的mod文件还会存储go module
的依赖。
$GOPATH/src
目录 存储我们项目的go代码。通常包含许多版本控制存储库(例如,由Git管理),每个存储库都包含了一个或多个package,每个package都在一个目录中包含一个或多个Go源文件。
因此,整个路径看起来像是:
go/
├──bin
└──main.exe
├──pkg
├──darwin_amd64
└──mod
└──src
├──github.com
│├──tylfin
││├──dynatomic
││└──geospy
│└──uudashr
│└──gopkgs
└──golang.org
└──x
└──tools
gopath具有多个作用,当我们想从github或其他地方获取go项目代码时,我们可以使用go get
指令。 此时程序会默认的将代码存储到$GOPATH/src
目录中。例如拉取go get github.com/dreamerjackson/theWayToGolang
时,目录结构如下:
go/
├──bin
├──pkg
└──src
└──github.com
└──dreamerjackson
└──theWayToGolang
当我们使用go get
的-u
参数时,会将该项目以及项目所依赖的所有其他项目一并下载到$GOPATH/src
目录中
gopath的另一个功能是明确package的导入位置。前文我们介绍过,go代码通过package进行组织,在helloworl程序中,我们导入了go语言内置的fmt
package.当我们要导入第三方时应该怎么做呢?其实如果我们在项目中导入了一个第三方包,例如
import"blue/red"
实际引用的是$GOPATH/src/blue/red
文件中的代码。
同理,如果导入为
import"github.com/gobuffalo/buffalo"
实际引用的是$GOPATH/src/github.com/gobuffalo/buffalo
文件中的代码。
首先在$GOPATH/src
中新建一个文件夹mymath
,在文件夹中新建一个文件add.go
»mkdirmymath
»cdmymath
»touchadd.go
add.go的内容如下,要注意导出的函数必须是首字母大写的,这是go语言的规则。
packagemymath
funcAdd(aint,bint)int{
returna+b
}
接着在$GOPATH/src
中创建一个main.go文件,即可以完整的调用mymath
包中的add
函数。
packagemain
import(
"fmt"
"mymath"
)
funcmain(){
result:=mymath.Add(1,2)
fmt.Println("result:",result)
}
通过go run main.go
即可运行输出1+2
的结果3
相比于其他语言繁琐的配置,go语言中的工作空间gopath
配置相对简单,容易理解
gopath使得在文件系统组织整个代码更加简洁、结构化,但是限制在单一的工作空间中。
gopath并没有解决版本依赖的问题,而将其留给了其他工具去实现。正因为如此,gopath中的代码就是一个唯一的master分支,并且强制使用各个模块最新的代码。
总结本文介绍了gopath的含义、功能、优劣、以及如何通过GOPATH来组织项目,导入第三方库。
在go1.13之后,go官方已经开始全面拥抱go module.
关于gopath就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果喜欢这篇文章,不如把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。