• 主页
  • 架构
  • 编程语言
  • 数据存储
  • 网络
  • VMware
  • 服务器
  • 组网
  • AI
  • 算法系列
  • 设计模式
  • 读书笔记
  • 思考
  • 工具
  • 其它技术

  • 主页
  • 架构
  • 编程语言
  • 数据存储
  • 网络
  • VMware
  • 服务器
  • 组网
  • AI
  • 算法系列
  • 设计模式
  • 读书笔记
  • 思考
  • 工具
  • 其它技术

如何在新项目中使用gomod

2024-08-15

系统环境

Mac + go1.12 + goland2019

简介

​ Go Module是Golang在1.11版本中推出的包管理机制。Golang以前一直缺少一个官方的包依赖管理工具,导致项目的依赖包无法进行有效管理

  1. 根据GOPATH查找包,同一个依赖包可能供多个项目使用,很难进行独立升级
  2. 开发人员不知道项目所有的依赖包信息,包的版本号信息等

使用

开启go mod

go mod 可以通过GO111MODULE来控制是否启用,GO111MODULE有一下三种类型。

  • on 所有的构建,都使用Module机制
  • off 所有的构建,都不使用Module机制,而是使用GOPATH和Vendor
  • auto 在GOPATH下的工程,不使用Module机制,不在GOPATH下的工程使用

根据情况执行命令:export GO111MODULE=on/off/auto

初始化go mod

  1. 新建项目

    • 项目结构如下图所示
    • main文件import books和httplib

    image-20200127212022929image-20200127212517195

  2. 在src目录下执行:go mod init 项目名称

    image-20200127212839698image-20200127212859594

    • 自动生成go.mod文件,go.mod文件里面没有核心信息
  3. src目录下执行命令:go build main.go

    image-20200127213104369

    • 报错cannot load books: cannot find module providing package books,处理方案:在import的位置添加项目名称,重新执行go build main.goimage-20200127213612222
    • httplib会下载到GOPATH/pkg/mod下,GOPATH如果有多个,则在第一个目录下
    image-20200127214224094 image-20200127215047191
    • go.mod里会有依赖包的信息

      image-20200127215507443

    • 至此,对于一个项目的go mod化就已经完成了

  4. goland中,main.go里的”asap/books”为红色,解决方案为

    • 如果Goland->perferences没有Go Modules,则需要下载最新版的goland

    • 在Goland->perferences配置go modimage-20200127221103753

      image-20200127221205242

命令

  • go help mod 查看mod命令的帮助

  • go mod init 初始化模块,目录下生成go.mod

  • go mod tidy 根据go.mod文件来处理依赖关系,从 go.mod 删除不需要的依赖、新增需要的依赖,这个操作不会改变依赖版本

  • go list -m all 显示依赖文件

  • go mod download 下载依赖(path是包的路径,version是包的版本),根据go.mod文件下载对应的依赖项到GOPATH/pkg/mod路径下

  • go mod vendor 复制所有依赖到模块下的vendor目录

  • go mod graph 输出模块所需的依赖表

  • go mod verify 验证模块的完整性

  • go mod edit -fmt 格式化 go.mod 文件。

  • go mod edit -require=path@version 添加依赖或修改依赖版本,这里支持模糊匹配版本号,详情可以看下文 go get 的用法。()

  • go mod edit -replace=path1@version=path2@version使用path2路径的包来代替path1路径的包。

    对于国内用户来说,手动维护这个文件是必然的,因为你需要把 golang.org/x/text 替换成 github.com/golang/text。示例

    go mod edit -replace=golang.org/x/sys@v0.0.0-20180830151530-49385e6e1522=github.com/golang/sys@v0.0.0-20180830151530-49385e6e1522

资料

  1. https://mp.weixin.qq.com/s/AsdCDodxZFxs2SkhSwOvpg
  2. https://studygolang.com/articles/21265
  3. https://www.jianshu.com/p/0cebc1b035b5 import路径问题处理
  4. https://www.jianshu.com/p/6f58f050ceda https://www.cnblogs.com/congccy/p/10762257.html goland安装go mod

扫一扫,分享到微信

微信分享二维码
Go-callvis
热风
© 2025 John Doe
Hexo Theme Yilia by Litten