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


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

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

    只是如今,我发现了一种更好的包管理方式gopkg。它通过约定使用带有版本号号的url来让go tool去check指定的版本号库,尽管如今仅仅支持github的go repositories,可是我认为已经足够强大。

    一个非常easy的样例,我们通过例如以下方式获取go的yaml包

    go get gopkg.in/yaml.v1
    

    而实际上,该yaml包相应的地址为:

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

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

    gopkg支持的url格式非常easy:

    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使用了一种非常easy地方式让我们方便的对go pakcage进行版本号管理。于是我也依葫芦画瓢,给我的log package做了一个v1版本号的,你能够直接go get gopkg.in/siddontang/go-log.v1/log

  • 相关阅读:
    Java 垃圾回收
    位运算符
    VBA中练习ADO:ActiveX Data Object
    使用VB6制作RTD函数
    VBA中使用JavaScript脚本语言解析JSON数据
    VB洗牌算法产生随机数组
    关于VB里判断逻辑的说明
    在VB中动态执行VBS代码,可操控窗体控件
    VB使用API进行RC4加密解密(MD5密钥)
    VB输出数据到EXCEL
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4375520.html
Copyright © 2020-2023  润新知