go mod应用

  • 时间:2025-11-22 22:59 作者: 来源: 阅读:0
  • 扫一扫,手机访问
摘要:1 go mod使用本地包go module的使用超级简单初始化go.modgo mod init整理依赖包go mod tidy如果想缓存到vendor目录go mod vendor 执行命令之后都会自动把依赖搞定.但是, 如果我们是本地开发的包, 还没有远程仓库的时候, 要怎么解决本地包依赖问题呢?使用replace将远程包替换为本地包服务幸运的是, go module 提供了另外一个方案,

1 go mod使用本地包

go module的使用超级简单

初始化go.mod

go mod init


整理依赖包

go mod tidy


如果想缓存到vendor目录

go mod vendor


执行命令之后都会自动把依赖搞定.

但是, 如果我们是本地开发的包, 还没有远程仓库的时候, 要怎么解决本地包依赖问题呢?

使用replace将远程包替换为本地包服务

幸运的是, go module 提供了另外一个方案, replace, 这个replace怎么使用的呢?

我们先看一下一个最基本的mod文件

module GoRoomDemo
go 1.13
require (
github.com/gin-gonic/gin v1.3.0
github.com/gohouse/goroom v0.0.0-20190327052827-9ab674039336
github.com/golang/protobuf v1.3.1 // indirect
github.com/gomodule/redigo v2.0.0+incompatible
github.com/mattn/go-sqlite3 v1.10.0
github.com/stretchr/testify v1.3.0 // indirect
golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53 // indirect
)

这是一个简单的GoRoom框架的依赖关系包, 如果我想使用本地的goroom, 只需要使用replace即可


module GoRoomDemo

go 1.13

require (
github.com/gin-gonic/gin v1.3.0
github.com/gohouse/goroom v0.0.0-20190327052827-9ab674039336
github.com/golang/protobuf v1.3.1 // indirect
github.com/gomodule/redigo v2.0.0+incompatible
github.com/mattn/go-sqlite3 v1.10.0
github.com/stretchr/testify v1.3.0 // indirect
golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53 // indirect
)

replace github.com/gohouse/goroom => /path/to/go/src/github.com/gohouse/goroom

这里的
path/to/go/src/github.com/gohouse/goroom 是本地的包路径

这样, 我们就可以愉快的使用本地目录了

其中本地包可以使用相对路径, "./" "../" 均可以使用

go.mod里 //indirect

间接依赖:后面的 // indirect, 它表明这是一个间接依赖, 间接依赖是指在当前module中没有直接import, 而被当前module使用的第三方module引入的包

顶层依赖:当前module中被直接import的包


2 go mod 版本指定的方式

分支名称 如: master

hash值 如: 5d3b015

tag标签 如: v0.14.4

go.mod

module libp2p
go 1.16
require (
    github.com/libp2p/go-libp2p 5d3b015
)

使用 go mod tidy 命令 会自动更新

> # go mod tidy

go.mod

module libp2p
go 1.16
require (
    github.com/libp2p/go-libp2p v0.14.4
)

3 告别GOPATH, 快速使用 go mod(Golang包管理工具)

使用go mod 管理项目, 就不需要非得把项目放到GOPATH指定目录下, 你可以在你磁盘的任何位置新建一个项目, 列如:

新建一个名为 wserver 的项目, 项目路径 D: estwserver (注意, 该路径并不在GOPATH里)

进入项目目录 D: estwserver 里, 新建一个 go源码文件: main.go

然后在 D: estwserver 里打开终端执行命令:

go mod init wserver (go mod init 后面需要跟一个名字, 我这里叫wserver)

看到提示 "go: creating new go.mod: module wserver" 说明 go mod 初始化成功了, 会在当前目录下生成一个 go.mod 文件。

包含go.mod文件的目录也被称为模块根, 也就是说, go.mod 文件的出现定义了它所在的目录为一个模块。

执行上述命令之后, 实则你已经可以开发编译运行此项目了, 列如我们随意使用github上的一个包, 在终端打印一下

main.go

package main
import (
    "fmt"
    "github.com/jinzhu/configor"
)
func main() {
    fmt.Println("使用外部包测试", configor.Config{})
}

运行一下, 会看到输出结果: { false false false} , 同时项目目录下多出了一个文件 go.sum 。go.sum 是记录所依赖的项目的版本的锁定。

目前我们再建一个项目内的包 route :

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

另外, 如果我们想把这个项目放到GOPATH下面, 不使用go mod模式, 而是想使用GOPATH模式的话,

只需要把这个项目移到GOPATH环境变量包含的任意一个目录下面的src目录里, 就可以启用GOPATH模式了(前提是 GO111MODULE 这个环境变量的值必须是auto 或 off)。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】八股已死、场景当立(场景篇-设计模式篇)(2025-11-22 23:27)
【系统环境|】群、环、域(2025-11-22 23:26)
【系统环境|】深度解析:基于Python的分布式缓存系统实现与性能优化(2025-11-22 23:26)
【系统环境|】TP区块链下载全解析:从技术原理到代码实现(2025-11-22 23:25)
【系统环境|】大模型在急性肾衰竭预测及临床方案制定中的应用研究(2025-11-22 23:25)
【系统环境|】特价股票投资中的可持续供应链管理整合方法(2025-11-22 23:24)
【系统环境|】第193期 如何微调大语言模型(LLM)(内含源码细节)(2025-11-22 23:23)
【系统环境|】用Python构建智能推荐系统:技术赋能美好生活(2025-11-22 23:23)
【系统环境|】企业估值中的氢能源应用评估(2025-11-22 23:22)
【系统环境|】ansible 学习之路(2025-11-22 23:22)
手机二维码手机访问领取大礼包
返回顶部