龙空技术网

每天2分钟学习GO语言编程(十三)GO语言的模块管理

程序缘来啦 200

前言:

此时兄弟们对“程序语言mod是什么意思”大约比较关怀,咱们都需要了解一些“程序语言mod是什么意思”的相关文章。那么小编在网络上收集了一些关于“程序语言mod是什么意思””的相关文章,希望朋友们能喜欢,各位老铁们快快来了解一下吧!

这一期我们来分享一下GO语言的模块管理,起初go语言是没有模块的概念的,一切的依赖通过GOPATH来管理,开发过程中需要把依赖和自身的源码都放入到GOPATH的src目录中。依赖和版本全靠自己来控制。项目小还好说,项目大了,开发和维护都是挺麻烦的。

在这种背景之下GO语言的模块管理就诞生了。GOv1.12版本开始支持mod命令,用于管理模块依赖和版本。使用下来确实方便了很多。本期分为以下几个部分:

环境变量设置初始化模块自动管理依赖go.mod文件介绍引用本地包模块使用的注意事项一、环境变量设置

在终端下执行go env查看环境变量。关于GO的模块需要设置以下变量GO111MODULE和GOPROXY就可以了

1.1命令终端下使用go env命令直接设置

go env -w GO111MODULE=ongo env -w GOPROXY=    //国内就使用这个,不然有些包下不来。
1.2windows下也可以直接编辑系统的环境变量
GO111MODULE=onGOPROXY= 
1.3 linux下也可以使用vi命令编辑.bashrc文件加入以下语句
vi ~/.bashrc #然后加入下面的语句,然后保存。export GO111MODULE=onexport GOPROXY=

保存退出后执行以下命令生效:

.  ~/.bashrc

设置完以上变量,再进行创建项目时就不需要再考虑GOPATH了。完全是通过模块自动管理了。

二、初始化模块

在命令行终端下使用以下命令初始化模块:

mkdir testGocd testGomkdir srcgo mod init testGo

执行完以上命令后就会在testGo中自动创建go.mod文件

三、自动管理依赖

在命令行终端下,进入到模块目录中之后,执行下面的命令,自动下载和去除未引用的依赖:

cd testGogo mod tidy

执行完以上命令后,会在go.mod文件中添加项目中所依赖的库,并且会生成go.sum文件,里面详细记录了引用版本和hash

四、go.mod文件介绍

开始介绍之前我们先把项目代码准备了,接上面的例子。在src目录中创建main.go增加以下代码:

package mainimport (	"flag"	"github.com/golang/glog")func main() {	flag.Parse()	glog.Info("test log")}

保存之后执行下面命令生go.mod和go.sum文件:

cd testGogo mod tidy

下面看一下生成的go.mod文件:

module testGogo 1.19require github.com/golang/glog v1.0.0

下面看一下生成的go.sum文件:

github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=

使用goland的朋友们记得在file->settings->Go Modules->Enable Go Modules打开,这样才会自动索引相关文件。这样后面写代码使用时就会自动提示补全代码了。

五、引用本地包

上面是直接使用引用了git上面的包,如果是想引用本地的呢?就要使用replace关键字了。下面例子的目录结构:

├─goLib│  │  go.mod│  └─src│          golib.go└─testGo    │  go.mod    │  go.sum    └─src            main.go

goLib的go.mod文件:

module golibgo 1.19

goLib的gollib.go文件:

package golibimport "fmt"func TestFunc() {	funcName := "TestFunc "	fmt.Println(funcName, "call")}

testGo的go.mod文件:

module testGogo 1.19require github.com/golang/glog v1.0.0require golib v0.0.0replace golib  v0.0.0 => ../golib/

testGo的main.go文件:

package mainimport (	"flag"	"github.com/golang/glog"	golib "golib/src")func main() {	flag.Parse()	glog.Info("test log")	golib.TestFunc()}

着重讲解下replace关键字,replace后面跟着的是require的包名和版本号。后面才是相对路径的包名。

六、模块使用的注意事项

模块在使用时需要注意以下事项:

单个目录中不能出现两个包名main函数只能出现在main包中main包中的内容别的包是不能引用的,编写模块时需要注意区分开。包内的变量,函数,结构体最好都是小写打头的。需要开放出去的可以通过大写开头的函数去暴露出去,或者只暴露接口。这样在外部使用时减少干扰,只专注于自己的关心的功能。

这一期分享到这里。感谢大家的支持。

标签: #程序语言mod是什么意思