首页 > 其他分享 >Go每日一库之166:go-version(语义化版本)

Go每日一库之166:go-version(语义化版本)

时间:2023-10-01 09:04:33浏览次数:46  
标签:SemVer 版本号 语义 一库 version go 比较

今天给大家推荐的是一个版本比较工具。该工具基于语义化标准的版本号进行比较、约束以及校验。以下是go-version的基本情况:

安装

通过go get进行安装:

go get github.com/hashicorp/go-version

解析和比较版本号

v1, err := version.NewVersion("1.2")

给版本号增加约束并校验

v1, err := version.NewVersion("1.2")

对一组版本号进行排序

versionsRaw := []string{"1.1", "0.7.1", "1.4-beta", "1.4", "2"}

实现原理

该库是将版本号通过正则表达式按照语义化SemVer的标准将各个部分进行解析,然后基于各个部分进行比较实现的。

版本号要基于遵守语义化标准SemVer。SemVer版本号的格式是核心版本号+预发布版本号+编译版本号三部分组成的:

<version core> "-" <pre-release> "+" <build>

在构建Version对象时,根据规则会解析version core(<major.minor.patch>)的各个部分和pre-release的各个。在比较时,首先比较version core的各个部分,如果version code相等,再比较pre-release的部分。这里需要注意就是预发布版本会小于正式版本号。

更多项目详情请查看如下链接。

开源项目地址:https://github.com/hashicorp/go-version

开源项目作者:HashiCorp

参考链接:https://semver.org/

标签:SemVer,版本号,语义,一库,version,go,比较
From: https://www.cnblogs.com/arena/p/17738582.html

相关文章

  • Go每日一库之165:go-callvis(可视化调用链)
    本文介绍一款工具go-callvis,它能够将Go代码的调用关系可视化出来,并提供了可交互式的web服务。go-callvis使用依赖Go1.17+Graphviz(可选,当工具指定了-graphviz时需要)工具安装goget-ugithub.com/ofabry/go-callvis#orgitclonehttps://github.com/ofabry/......
  • Go每日一库之164:uiprogress(终端进度条)
    今天给大家推荐的是在终端(terminal)下能够显示进度条的工具:uiprogress。先看下使用该包的效果图:相信大家在linux或mac终端上都下载过东西,然后会出现下载的进度条。今天我们就给大家分析下实现原理并演示其效果。安装$goget-vgithub.com/gosuri/uiprogress实现原理分析实......
  • Go每日一库之162:throttled(轻量级限流工具)
    throttled是一个非常轻量且易扩展的限流组件,我们可以将它轻松地集成到应用程序中,以实现限流和配额管理的能力。简介throttled(https://github.com/throttled/throttled)基于通用信元速率算法实现了对资源的访问速率限制,资源可以是特定的URL、用户或者任何自定义的形式,可以很......
  • Go每日一库之161:grm(Redis Web管理工具)
    GRM是基于go+vue的web版redis管理工具,部署简单便捷,支持SSH连接,用户校验,操作日志、命令行模式、LUA脚本执行等功能。介绍基于go+vue的web版redis管理工具【Webredismanagementtoolbasedongolangandvue】功能清单管理连接(直连和SSH)、切换DB支持string/lis......
  • Go每日一库之160:gvm(Go版本管理)
    **gvm**用于go版本的管理,主要的功能为go版本的查看,下载安装和切换。安装$bash<<(curl-s-S-Lhttps://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)Cloningfromhttps://github.com/moovweb/gvm.gitto/Users/admin/.gvmCreatedprofilef......
  • Go每日一库之159:bubbletea(控制台界面程序)
    简介[bubbletea](https://github.com/charmbracelet/bubbletea)是一个简单、小巧、可以非常方便地用来编写TUI(terminalUserInterface,控制台界面程序)程序的框架。内置简单的事件处理机制,可以对外部事件做出响应,如键盘按键。一起来看下吧。先看看bubbletea能做出什么效果:感谢k......
  • Go每日一库之158:termtables(表格形式数据输出)
    简介今天学个简单点的,[termtables](https://github.com/scylladb/termtables)处理表格形式数据的输出。适用于随时随地的输出一些状态或统计数据,便于观察和调试。是一个很小巧的工具库。我在学习[dateparse](https://darjun.github.io/2021/06/24/godailylib/dateparse/)库时偶尔......
  • Go每日一库之157:tproxy (TCP连接代理与分析 )
    你有同感吗?当大家在开发服务端代码的时候,会不会经常有如下疑问?纳闷MySQL连接池到底有多少连接?每个连接的生命周期持续多久?连接异常断开的时候到底是服务端主动断的,还是客户端主动断的?当长时间没有请求的时候,底层库是否有KeepAlive请求?复杂网络情况的处理从来都是后端......
  • Go每日一库之155:go-spew(输出 Go 数据结构)
    对于应用的调试,我们经常会使用fmt.Println来输出关键变量的数据。或者使用log库,将数据以log的形式输出。对于基础数据类型,上面两种方法都可以比较方便地满足需求。对于一些结构体类型数据,通常我们可以先将其序列化后再输出。如果结构体中包含不可序列化的字段,比如func类型......
  • Go每日一库之154:eCapture(无需CA证书抓包https)
    eCapture介绍eCapture是一款基于eBPF技术实现的用户态数据捕获工具。不需要CA证书,即可捕获https/tls的通讯明文。项目在2022年3月中旬创建,一经发布,广受大家喜爱,至今不到两周已经1200多个Star。作用不需要CA证书,即可捕获HTTPS/TLS通信数据的明文。在bash审计场景,可以捕获ba......