阅读更多

0顶
0踩

编程语言

转载新闻 gopkg:一种方便的go pakcage管理方式

2016-07-25 18:40 by 副主编 mengyidan1988 评论(0) 有5087人浏览
本文来自:唐刘的博客
在使用go的过程中,我们有时候会引入一些第三方库来使用,而通常的方式就是使用go get,但是这种方式有一个很严重的问题,如果第三方库更新了相关接口,很有可能你就无法使用了,所以我们一套很好地包管理机制。

读生产环境下go语言最佳实践有感一文中,我介绍过soundcloud公司的做法,直接将第三库的代码check下来,放到自己工程的vendor目录里面,或者使用godep。

不过现在,我发现了一种更好的包管理方式gopkg。它通过约定使用带有版本号的url来让go tool去check指定的版本库,虽然现在只支持github的go repositories,但是我觉得已经足够强大。

一个很简单的例子,我们通过如下方式获取go的yaml包
go get gopkg.in/yaml.v1

而实际上,该yaml包对应的地址为:
引用

https://github.com/go-yaml/yaml

yaml.v1表明版本为v1,而在github上面,有一个对应的v1 branch。

gopkg支持的url格式很简单:
gopkg.in/pkg.v3      → github.com/go-pkg/pkg (branch/tag v3, v3.N, or v3.N.M)
gopkg.in/user/pkg.v3 → github.com/user/pkg   (branch/tag v3, v3.N, or v3.N.M)

我们使用v.N的方式来定义一个版本,然后再github上面对应的建立一个同名的分支。gopkg支持(vMAJOR[.MINOR[.PATCH]])这种类型的版本模式,如果存在多个major相同的版本,譬如v1,v1.0.1,v1.1.2,那么gopkg会选用最高级别的v1.1.2使用,譬如有如下版本:
  • v1
  • v2.0
  • v2.0.3
  • v2.1.2
  • v3
  • v3.0

那么gopkg对应选用的方式如下:
  • pkg.v1 -> v1
  • pkg.v2 -> v2.1.2
  • pkg.v3 -> v3.0

gopkg不建议使用v0,也就是0版本号。

gopkg同时列出了一些建议,在更新代码之后是否需要升级主版本或者不需要,一些必须升级主版本的情况:
  • 删除或者重命名了任何的导出接口,函数,变量等。
  • 给接口增加,删除或者重命名函数
  • 给函数或者接口增加参数
  • 更改函数或者接口的参数或者返回值类型
  • 更改函数或者接口的返回值个数
  • 更改结构体

而一下情况,则不需要升级主版本号:
  • 增加导出接口,函数或者变量
  • 给函数或者接口的参数名字重命名了
  • 更改结构体

上面都提到了更改结构体,譬如我给一个结构体增加字段,就可能不需要升级主版本,但是如果删除结构体的一个导出字段,那就必须要升级了。如果只是单纯的更改改结构体里面非导出字段的东西,也不需要升级。

更加详细的信息,请直接查看gopkg

可以看到,gopkg使用了一种很简单地方式让我们方便的对go pakcage进行版本管理。于是我也依葫芦画瓢,给我的log package做了一个v1版本的,你可以直接
go get gopkg.in/siddontang/go-log.v1/log
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • go 1.4.1 api package

    go语言1.4.1的api package

  • gopkg:一种方便的go package管理方式

    在使用go的过程中,我们有时候会引入一些第三方库来使用,而通常的方式就是使用go get,但是这种方式有一个很严重的问题,如果第三方库更新了相关接口,很有可能你就无法使用了,所以我们一套很好地包管理机制。...

  • golang常用库之-命令行工具urfave/cli(gopkg.in/urfave/cli.v2)

    Go语言命令行库-urfave/cli 很多用Go写的命令行程序都用了urfave/cli这个库。urfave/cli是一个命令行的框架。 用C写过命令行程序的人应该都不陌生,我们需要根据argc/argv一个个地解析命令行参数,调用不同的函数,...

  • Kotlin协程不可用(java.lang.IllegalStateException: Module with the Main dispatcher is missing)另一种可能原因

    流程后产生的jar包文件内部数量超过65535,会导致。上文章的末尾有相关解决方式。Kotlin内部协程的实现,其核心源码中通过。中有相关注释描述,其核心是在。中的jar包进行裁剪,仅保留。文件,因此协程不可用。

  • Go语言学习笔记-编译时的pakcage文件目录约束

    需要定义GOPATH宏,让其指向某个工作目录,不如c:\workspace\mygo\ 该目录下需要 有src, bin pkg三个...go 源码中 需要import 的package ,比如 A./B/PackageName, 则该文件原则上应该放在src目录下的A/B/PackageName/

  • pakcage包

    软件包机制 1.为了解决类的命名冲突问题,在类名前加...4.pcakage定义的格式:通常采用公司域名倒叙方式 com.sxnydx.AAA.system 以上包含义:scnydx公司开发的AAA项目,system是其中的一个模块 公司域名倒叙....

  • go build报错,提示错误can‘t load package: package xxx is not in GOROOT (D:\basic_tool\Go\src\xxx)

    这个go build的错误困扰了我很长时间,可能最大原因还是一个小白,在折腾了大半天加一晚上,度娘上各种找原因,也没有找到合适的解决办法,最终还是在大佬的指导下成功解决,所以记录一下。 配置环境介绍 目的:在...

  • Go 依赖管理

    Golang包管理工具glide简介 前言 Golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情。在这里我感受到了其中一些好处: 没有少了许多代码格式风格的争论,强制统一的...

  • 【Golang 基础】Go 语言的程序结构

    Go 语言的项目结构    一般,一个 Go 项目在 GOPATH 下,会有如下三个目录 . ├── bin // 存放编译后的可执行文件 ├── pkg // 存放编译后的包文件 └── src // 存放项目源文件 一般情况下,bin 和 pkg ...

  • 利用npm-extra-extension拆分pakcage.json,重新生成指定的json文件,并区别管理。

    此管理器主要用于工程化工作中,欢迎给星,以示鼓励,更多npm扩展持续更新中。 详细内容请看, 请赐我一颗github小星星: https://github.com/pomelott/npm-extra npm-extra-extension npm-extra-extension is used ...

  • Go语言中的包和单元测试_2021_11_04

      main包申明的程序是可运行的。 包是函数和数据的集合,将有相关的鹅的函数和数据放在统一的文件目录进行管理,每个包都可以作为独立的单元维护并提供给其他的项目 进行...在Go语言里面是通过首字母的大小写来定位包

  • Android资源管理框架:查找过程

    在Android系统中,每一个应用程序一般都会配置很多资源,用来适配不同密度、大小和方向的屏幕,以及适配不同的国家、地区和语言等等。这些资源是在应用程序运行时自动根据设备的当前配置信息进行适配的。这也就是说...

  • go语言基础语法

    1.package ...要生成go语言可执行程序,必须要有main的pakcage包,求必须在该包下,且必须在该包下有main函数。 同一个路径下只能存在一个pakcage,一个package可以拆成多个源文件组成。 2.import 1...

  • Go语言 golang 语法详解笔记

    go语法大全,学习Go语言过程中记录下来的语法详解笔记,可以帮助新接触的朋友快速熟悉理解Golang,也可以作为查询手册翻阅。

  • Anaconda安装进度条卡住不动Setting up the pakcage cache

    解决Anaconda安装问题:进度条一直卡在Setting up the pakcage cache·····,换一个版本下载源安装。解决报错:操作无法完成,因为其中的文件夹或文件已在另一程序打开,请关闭该文件夹或文件,然后重试。去任务...

  • npm包管理及发布教程汇总

    (node package manager)基本认识package(包)module(模块)发布包发布一个unscoped包发布一个scoped包过滤部分文件npm包的迭代npm的版本管理废弃/删除废弃删除nrm源管理工具 说明: 原谅参考自sf社区文章,这里只是做...

  • 基于springboot大学生就业信息管理系统源码数据库文档.zip

    基于springboot大学生就业信息管理系统源码数据库文档.zip

  • 基于java的驾校收支管理可视化平台的开题报告.docx

    基于java的驾校收支管理可视化平台的开题报告

  • 原木5秒数据20241120.7z

    时间序列 原木 间隔5秒钟 20241120

Global site tag (gtag.js) - Google Analytics