首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go 模块:v2 及更高版本

主要版本和模块路径(Major versions and module paths) 模块标准化了一个重要原则,导入兼容原则: 如果旧包和新包具有相同的导入路径,则新包必须向后兼容旧包 根据定义,...在出现模块前,gopkg.in 允许包维护人员遵循我们现在所称的导入兼容性规则。...使用 gopkg.in,如果你依赖一个包的导入路径gopkg.in/yaml.v1 和另一个包的导入导入路径gopkg.in/yaml.v2,这两个包并不会冲突,因为两个 yaml 包有不同的导入路径...因为 gopkg.inGo 模块共享相同的版本后缀方法,Go 命令接受 gopkg.in/yaml.v2 中的 .v2 作为有效的主版本后缀。...但是,如果 v2+ 源代码位于存储库的默认分支(通常是 master)上,则不知道版本的工具,包括 GOPATH 模式下的 Go 命令,可能无法区分主要版本。

96320

Go Modules 如何创建和发布 v2 及更高版本?

02 主要版本和模块路径Go 语言中,模块有一个重要原则,导入兼容性规则: 如果旧包和新包具有相同的导入路径,则新包必须与旧包向后兼容。 根据定义,如果新的主要版本的包与以前的版本不向后兼容。...对主要版本的后缀要求是 Go Modules 与大多数其他依赖项管理工具不同的方法之一。解决依赖性问题需要后缀。 在 Go 模块 gopkg.in 允许包维护者遵循我们现在所说的导入兼容性规则。...使用 gopkg.in,如果依赖于导入 gopkg.in/yaml.v1 的包和导入 gopkg.in/yaml.v2 的另一个包,则没有冲突,因为两个 yaml 包具有不同的导入路径 - 它们使用版本后缀...由于 gopkg.inGo Modules 共享相同的版本后缀方法,因此 Go 命令接受 gopkg.in/yaml.v2 中的 .v2 作为有效的主要版本后缀。...但是,如果 v2+ 源代码位于存储库的默认分支(通常是主分支)上,则不具有版本识别功能的工具(包括 GOPATH 模式下的 go 命令)可能无法区分主要版本。

3K30
您找到你想要的搜索结果了吗?
是的
没有找到

go mod与 govendor 区别与使用

目录先寻找依赖包;找不到再从GOPATH 中寻找 解决的问题 将源码拷贝到当前目录下,这样导包当前工程代码到任意的机器的 ¥GOPATH/src 都可以编译通过,避免项目代码外部依赖过多 未解决的问题 无法精确的引用...什么是 GOROOT 和 GOPATH GOROOT:golang的安装路径,当安装好go之后,默认会安装在/usr/local/go之下。GOROOT的主要作用是标识go的当前安装位置。...e github.com/ugorji/go/codec e gopkg.in/go-playground/validator.v8 e gopkg.in/yaml.v2 pl govendor-example.../codec ├── e gopkg.in/go-playground/validator.v8 ├── e gopkg.in/yaml.v2 └── pl govendor-example...包不再保存在GOPATH中,而是被下载到了$GOPATH/pkg/mod路径下. go mod vendor 会将依赖包放到 vendor 目录 ?

1.4K20

GoLang 包的使用与管理

包的导入 每一个包都通过唯一的字符串进行标识,这个字符串被称为“导入路径”。 一个包需要使用其他包时,需要在 package 关键字生命的所在包行下面使用 import 关键字声明导入的包。...语言本身没有对包的命名做任何限制,如何查找到包取决于 go 工具对包名的理解,但为了保证包导入路径的唯一性,除标准库中的包,其他包的导入路径应该以互联网域名(组织机构拥有的域名或用于存放包的域名)作为路径开始...go test 命令时,两个包会同时被构建 有些包管理工具(如 godep)会在 import 语句引入的包尾部增加版本号声明,如 "gopkg.in/yaml.v2",他的包名仍然是 "gopkg.in...godep 将项目中使用到的第三方库复制到项目的 Godeps 目录下,因此 go build、go install 等工具显然因为无法找到包而不能工作了,所以 godep 提供了一系列工具来代替原生的.../yaml.v2 6.2.3.

1.9K20

Go modules基础精进,六大核心概念全解析(下)

主版本号后缀遵循导入兼容规则: 如果一个新代码包和老代码包拥有同样的导入路径,那么新包必须保证对老代码包的向后兼容。 根据定义,模块的新主版本中的包与先前主版本中的相应包不向后兼容。...因此,从 v2 开始,包需要新的导入路径。 这是通过向模块路径添加主版本后缀来实现的。...由于模块路径是模块内每个包的导入路径的前缀,因此将主版本后缀添加到模块路径可为每个不兼容的版本提供不同的导入路径。 主版本 v0 或 v1 不允许使用主版本后缀。...这里有一个特例,以 gopkg.in/ 开头的模块路径必须始终具有主版本后缀,即使是 v0 和 v1 版本。 后缀必须以点而不是斜线开头(例如,gopkg.in/yaml.v2)。...因为在 Go Modules 推出之前,gopkg.in 就沿用了这个规则,为了能让引入 gopkg.in 包的代码能继续导入编译, Go 做了一些兼容性工作。

66370

Go依赖管理——Go Mod

module简介 在 go1.12,go发布了官方的包管理工具 Go Module 使用module 生成go.mod 新建一个文件夹作为项目目录,执行 go mod init 模块名称 使用mod初始化项目...,生成项目依赖管理文件go.mod 这个文件也可以手动创建,无伤大雅 初始化后的go.mod文件内容如下 module test go 1.14 添加依赖 通过在go.mod中,添加require语句...,导入依赖,如 require golang.org/x/text v0.3.0 require gopkg.in/yaml.v2 v2.1.0 除了使用v版本号,还可以直接写github分支名,默认下载最新版本...mod download 编译运行 在项目目录创建主类源代码,接下来就可以执行编译运行命令了,比如是main.go go build main.go ..../main.exe 清除多余依赖 go mod tidy 会修改go.mod,删除掉没有用的依赖 修改仓库代理 go env -w GOPROXY=https://goproxy.cn,direct

2K41

Go包管理工具

按照 Go 的惯例,在新的 experiment feature 首次加入时,都会有一个特性开关,go modules 也不例外,GO111MODULE 这个临时的环境变量就是 go modules 特性的...off: go modules experiment feature 关闭,go compiler 会始终使用 GOPATH mode,即无论要构建的源码目录是否在 GOPATH 路径下,go compiler...包的版本控制 下面的版本都是合法的: gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 gopkg.in/vmihailenco/msgpack.v2...v2.9.1 gopkg.in/yaml.v2 <=v2.2.1 github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e...另外版本号是支持 query 表达式的,其求值算法是 “选择最接近于比较目标的版本 (tagged version)”,即上文中的 gopkg.in/yaml.v2 会找不高于 v2.2.1 的最高版本

63510

Go Modules基础精进,六大核心概念全解析(下)

主版本号后缀遵循导入兼容规则:如果一个新代码包和老代码包拥有同样的导入路径,那么新包必须保证对老代码包的向后兼容。 根据定义,模块的新主版本中的包与先前主版本中的相应包不向后兼容。...因此,从v2开始,包需要新的导入路径。这是通过向模块路径添加主版本后缀来实现的。由于模块路径是模块内每个包的导入路径的前缀,因此将主版本后缀添加到模块路径可为每个不兼容的版本提供不同的导入路径。...这里有一个特例,以gopkg.in/开头的模块路径必须始终具有主版本后缀,即使是v0和v1版本。后缀必须以点而不是斜线开头(例如,gopkg.in/yaml.v2)。...因为在Go Modules推出之前,gopkg.in就沿用了这个规则,为了能让引入gopkg.in包的代码能继续导入编译,Go做了一些兼容性工作。...举个例子,如果导入的包路径是example.com/a/b,发现example.com/a是一个模块路径,那么就会去检查example.com/a在 b目录中是否包含这个包,在这个目录中要至少存在一个go

35730

Go modules基础精进,六大核心概念全解析(下)

主版本号后缀遵循导入兼容规则: 如果一个新代码包和老代码包拥有同样的导入路径,那么新包必须保证对老代码包的向后兼容。 根据定义,模块的新主版本中的包与先前主版本中的相应包不向后兼容。...因此,从 v2 开始,包需要新的导入路径。 这是通过向模块路径添加主版本后缀来实现的。...由于模块路径是模块内每个包的导入路径的前缀,因此将主版本后缀添加到模块路径可为每个不兼容的版本提供不同的导入路径。 主版本 v0 或 v1 不允许使用主版本后缀。...这里有一个特例,以 gopkg.in/ 开头的模块路径必须始终具有主版本后缀,即使是 v0 和 v1 版本。 后缀必须以点而不是斜线开头(例如,gopkg.in/yaml.v2)。...因为在 Go Modules 推出之前,gopkg.in 就沿用了这个规则,为了能让引入 gopkg.in 包的代码能继续导入编译, Go 做了一些兼容性工作。

432100

Go module基础使用及Go 1.16中的改进

go.mod文件定义了模块的路径path,这个路径是用于import的路径以及编译时该模块依赖于其他模块的需求。该模块依赖的模块通过模块路径 + 语义化的版本号的格式添加到go.mod中。...该模块中的包在被导入的时候,import的路径使用 module + / + package的模式导入即可。 官网有消息称在Go 1.17版本将不再对GOPATH模式支持。...go.sum文件是对导入的依赖包的特定版本的hash校验值,作用就是确保将来下载的依赖包版本和第一次下载到的依赖版的版本号相同,以防止在将来有版本号升级后 程序不兼容的问题。...另外,以下版本号格式也都是合法的: 1. gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 2. gopkg.in/vmihailenco/msgpack.v2...v2.9.1 3. gopkg.in/yaml.v2 <=v2.2.1 4. github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e

39720

Go 编程 | 连载 21 - Go Modules 和 Package

一、GOPATH 与 Go Modules GOPATH 开发模式 GOPATH 是 Go 语言中使用的一个环境变量,它使用绝对路径提供项目的共工作目录,GOPATH 适合处理大量 Go 语言源码、多个包组合而成的复杂工程...indirect golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in.../yaml.v2 v2.4.0 // indirect ) 其中 module 是用来定义包名,require 表示定义依赖包及版本,而 indirect 表示间接引用。...包具有如下特性: 一个目录下的同级文件归属一个包 包名可以与其目录不同名 包名为 main 的包为应用程序的入口包,编译源码没有 main 包时将无法编译输出可执行文件。...Go 中包的导入分为单行和多行导入 import "package1" import "package2" import ( "package1" "package2" ) 新建一个 zulu

44820

基于Gin+Gorm框架搭建MVC模式的Go语言企业级后端系统

按照以往jdbc连接数据库的步骤,首先需要加载jdbc驱动程序,然后再创建数据库的连接,其实,在Go连接数据库,同样需要类似这样的操作。 首先,需要导入数据库驱动程序。...Gorm已经包含了驱动程序,只需要将它导入进来即可: import _ "github.com/jinzhu/gorm/dialects/mysql" 进入到这个依赖包的源码,根据命名就可以看到出,这是一个.../jinzhu/gorm/dialects/mysql" "io/ioutil" "gopkg.in/yaml.v2" "fmt" ) 到这一步,效果如下: ?...在controller层建立一个UserController.go类,类似Java的controller,主要用于根据url跳转执行到对应路径的方法。...最后一步,就是建立main的启动类了,需要注意一点是,go的启动类,必须命名在package main的包下,否则无法进行启动。

7.4K31

GoLang 新版包管理 -- go module 的使用

需要注意的是,v0.x.x、v1.x.x 与 v2 以上版本具有不同的特性: v0.x.x — 测试版本,不要求小版本间需要保证兼容性 v1.x.x — 首个正式版本,从 v0 升级到 v1 版本引用路径无需变更...当主版本号大于等于 v2 时,这个模块的引用路径末尾必须加上 vN 3.3. v2 以上版本引入路径的变化 关于第三点,下面是不同场景下包引入路径的变化: 在 go.mod 文件中: module...初始化 对于新项目或已有的非 go module 管理的项目,可以执行下面的命令来进行初始化: go mod init packagename 是模块的引入路径,例如 github.com...你也可以换成指定的 commit_id: gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 gopkg.in/vmihailenco/msgpack.v2...v2.9.1 gopkg.in/yaml.v2 <=v2.2.1 github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e

1.6K30

GO 依赖管理工具go Modules(官方推荐)

本文将介绍使用Go Modules相关操作 1、安装Go 1.13或升级到Go 1.13 ​ 安装 2、配置环境变量 #修改 GOBIN 路径(可选) go env -w GOBIN=$HOME...go env -w: Go1.13 新增了 go env -w 用于写入环境变量,而写入的地方是 os.UserConfigDir 所返回的路径,需要注意的是 go env -w 不会覆写。...这里的填写格式基本为包引用路径+版本号,另外比较特殊的是 go $version,目前从 Go1.13 的代码里来看,还只是个标识作用,暂时未知未来是否有更大的作用。.../check.v1 v0.0.0-20161208181325-20d25e280405 gopkg.in/go-playground/assert.v1 v1.2.1 gopkg.in/go-playground.../validator.v8 v8.18.2 gopkg.in/yaml.v2 v2.2.2 注意 使用go.mod管理依赖会对go get命令产生一定影响, 用 go help module-get 和

1.6K41

Go编程之相关命令工具记录

github.com/golang/go #比如github网站的项目包路径都有一个共同的标准 github.com - 网站域名:表示代码托管的网站,类似于电子邮件 @ 后面的服务器地址。...Tips:vender 的机制能够控制Go语言程序编译时依赖包搜索路径的优先级, 例如: 查找项目的某个依赖包, 首先会在项目根目录下的vender文件夹中查找, 如果没有找到就会去$GOAPTH/src...path 打印依赖的GOPATH路径 godep restore 在GOPATH中拉取依赖的版本 godep update 更新选定的包或go版本 godep diff 显示当前和以前保存的依赖项集之间的差异...go get foo@e3702bed2,依赖的版本支持以下几种格式: gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 gopkg.in/vmihailenco.../msgpack.v2 v2.9.1 gopkg.in/yaml.v2 <=v2.2.1 github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e

55630
领券