前言:
此时兄弟们对“程序语言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是什么意思