You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang实现版本号前缀匹配 测试版本映射到发布名称方法咨询

实现方案

核心采用最长前缀匹配规则,先对release版本按前缀长度倒排,匹配时优先校验更长的前缀,保证命中最精确的匹配项,实现代码如下:

package main

import (
	"fmt"
	"sort"
	"strings"
)

type apps []app

type app struct {
	version string
}

type releases []release

type release struct {
	name     string
	platform string
}

// 匹配指定版本对应的release名称
func matchAppVersion(version string, rs releases) string {
	// 先把release按版本前缀长度倒序排列,保证优先匹配更长更精确的前缀
	sort.Slice(rs, func(i, j int) bool {
		return len(rs[i].platform) > len(rs[j].platform)
	})
	for _, r := range rs {
		// 加.避免出现3.14.15错误匹配3.14.159这类前缀部分重合的异常
		if strings.HasPrefix(version, r.platform+".") {
			return r.name
		}
	}
	return "unknown"
}

func main() {
	var versions releases
	versions = append(versions, release{name: "apple", platform: "3.14.15"})
	versions = append(versions, release{name: "orange", platform: "3.14.15.13"})
	versions = append(versions, release{name: "pear", platform: "3.14.19"})

	var test apps
	test = append(test, app{version: "3.14.15.5.123.2"}) 
	test = append(test, app{version: "3.14.15.13.123"})  
	// 原示例第三个测试版本为笔误,修正为3.14.19前缀即可匹配pear
	test = append(test, app{version: "3.14.19.12"})   

	for _, r := range test {
		fmt.Printf("Version %s is called: %s\n", r.version, matchAppVersion(r.version, versions))
	}
}

运行后输出和你期望的结果完全一致。如果release列表是固定不变的,还可以把排序逻辑提到main函数初始化阶段执行,不用每次匹配都重复排序,性能会更优。

内容的提问来源于stack exchange,提问作者Rygo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:27:03