Go module

分手后的思念是犯贱 2022-08-29 00:23 244阅读 0赞

Go module

文章目录

  • Go module
    • 简介
    • 使用

简介

Go的包管理方式是逐渐演进的,一开始所有的包都是放在GoPath下的

  • GoPath不区分项目,任何import的路径都是葱花Gopath为根目录开始的
  • 如果存在多个项目并且不同项目对于同一个依赖库的版本需求不一样时,
    无法在同一个GOPATH下放置不同版本的依赖项

Go Module是语义化版本管理的依赖项的包管理工具,解决了GoPath存在的缺陷,是Go官方的版本管理工具

使用

首先,创建一个新的工程

  1. package awesomeProject3
  2. import "fmt"
  3. func TestGoMod() {
  4. fmt.Print("使用go mod")
  5. }

随后,使用go mod init moduleName初始化工程为go mod工程

  1. go mod init github.com/Kevin091827/GoLearning/gomod

此时会得到一个go.mod文件,一般的moduleName都是具体的某个仓库的地址

  1. module github.com/Kevin091827/GoLearning/gomod
  2. go 1.16

其次,将代码推送到github,push成功后就可以通过go get进行依赖包拉取

  1. go get github.com/Kevin091827/GoLearning/gomod

随后,更新模块发布版本

  1. package awesomeProject3
  2. import "fmt"
  3. func TestGoMod() {
  4. fmt.Print("使用go mod")
  5. fmt.Println("tag 1")
  6. }

发布版本

  1. git tag 1.0.0
  2. git push origin master --tag

使用已经发布的版本,go mod默认会去找可用的依赖包的最高版本

  1. 重新执行go build即可更新依赖

如果需要使用特定版本,只需要在require后加上版本即可

  1. require github.com/Kevin091827/GoLearning/gomod v1.0.1

随后,如果有的依赖包不在github或者某个托管网站上,而是在本地,此时需要通过replace重新指定依赖包地址,重新指定后,编译时就能找到依赖包

  1. replace 3rd/module/testmod => /usr/local/go/testmod

最后,还有go mod vender,在默认情况下go build将忽略vendor目录,如果要从vendor目录开始构建:

  1. go build -mod vendor

这样做的好处可以不用依赖网络上游的版本,在内部自由使用稳定可控制的版本进行构建,go mod vendor应该会成为非开源项目的主要构建方式。

发表评论

表情:
评论列表 (有 0 条评论,244人围观)

还没有评论,来说两句吧...

相关阅读

    相关 关于go module

    从Go 1.11开始引入module,用于版本管理。 通过使用module,工程目录的位置不用必须放在GOPATH下。 当前版本是1.13,下文中将以Go1.13为例介绍m

    相关 go module

    前言 go 1.5 引进了vendor管理工程依赖包,但是vendor的存放路径是在GOPATH底下,另外每个依赖还可以有自己的vendor,通常会弄得很乱,尽管dep管