go mod使用笔记

本文介绍Go 1.11后引入的gomod,一种改进的依赖管理方式,无需受GOPATH限制。通过实例演示如何初始化gomod,创建go.mod文件,以及在项目中使用外部和内部依赖包。同时,讲解了在不同目录结构下gomod的工作原理,以及如何配置代理解决依赖下载问题。
摘要由CSDN通过智能技术生成

依赖管理

在go 1.11以前相,相信GOPATH一直被广大gopher所诟病。
go mod出现以后,我们不必再被GOPATH所束缚,go mod将带给你更好的依赖包管理体验。
如果你想体验能go mod,可以在GOPATH/src之外建一个项目仓库。

实战

首先在GOPATH/src 之外建项目目录 在这里插入图片描述

然后初始化gomod依赖文件
go mod init gin_tutorial
在这里插入图片描述

在这里插入图片描述
说明 go mod 初始化成功了,会在当前目录下生成一个 go.mod 文件。
包含go.mod文件的目录也被称为模块根,意味着go.mod 文件的定义了它所在的目录为一个模块。

经过上述步骤,我们已经可以进入开发了,我们在main文件中引入一个外部包:

package main

import (
	"fmt"
	"github.com/beevik/etree"
)

func main(){
	doc := etree.NewDocument()
	fmt.Println(*doc)
}

运行之后会生成一个文件go.sum,它记录所依赖的项目的版本的锁定。

在这里插入图片描述

go.sum文件内容

github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs=
github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=

此时go.mod 也多了一行内容

module tutorial

go 1.12

require github.com/beevik/etree v1.1.0 // indirect

接下来在项目中创建一个子目录,并在main中引入该包的内容,需要使用包内的绝对路径

在这里插入图片描述

package main

import (
	"fmt"
	"github.com/beevik/etree"
	"tutorial/tools"
)

func main(){
	doc := etree.NewDocument()
	fmt.Println(*doc)
	tools.Foo()
}

“tutorial/tools” 导入这个包的地方是 模块内的绝对路径,就是要从go.mod所在的目录开始。

注意:如果你使用的是GoLand,确保选项中打开了go modules选项
在这里插入图片描述

另外,如果我们想把这个项目放到GOPATH下面,不使用go mod模式,而是想使用GOPATH模式的话,,只需要把这个项目移到GOPATH环境变量包含的任意一个目录下面的src目录里,就可以启用GOPATH模式了。

GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:

  1. 当前目录在GOPATH/src之外且该目录包含go.mod文件
  2. 当前文件在包含go.mod文件的目录下面。

有时可能遇到依赖包拉不下来的问题
这里可以设置go mod的微软代理

export GOPROXY="https://athens.azurefd.net"
export GO111MODULE=on

亲测可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值