Skip to content

🛠️ 便捷函数

本模块提供一组包级便捷函数,简化 CPE 的解析、校验、匹配、转换与过滤等常见操作。

🚀 MustParse

go
func MustParse(cpeStr string) *CPE

解析 CPE 字符串,解析失败时 panic。适用于初始化常量或测试代码。

参数类型说明
cpeStrstringCPE 字符串
返回值类型说明
第 1 个*CPE解析得到的 CPE 对象
go
cpe := cpeskills.MustParse("cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*")

🔁 ParseOr

go
func ParseOr(cpeStr string, defaultCPE *CPE) *CPE

解析 CPE 字符串,失败时返回 defaultCPE 而不报错。

参数类型说明
cpeStrstringCPE 字符串
defaultCPE*CPE解析失败时使用的默认值
返回值类型说明
第 1 个*CPE解析结果或默认值
go
cpe := cpeskills.ParseOr("bad-string", cpeskills.MustParse("cpe:2.3:a:*:*:*:*:*:*:*:*:*"))

✅ IsCPE23String

go
func IsCPE23String(s string) bool

判断字符串是否符合 CPE 2.3 格式。

参数类型说明
sstring待判断的字符串
返回值类型说明
第 1 个bool是 2.3 格式返回 true
go
fmt.Println(cpeskills.IsCPE23String("cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*"))

✅ IsCPE22String

go
func IsCPE22String(s string) bool

判断字符串是否符合 CPE 2.2 格式。

参数类型说明
sstring待判断的字符串
返回值类型说明
第 1 个bool是 2.2 格式返回 true
go
fmt.Println(cpeskills.IsCPE22String("cpe:/a:microsoft:windows:10"))

⚡ QuickMatch

go
func QuickMatch(cpeStr1, cpeStr2 string) (bool, error)

快速匹配两个 CPE 字符串,无需手动解析。

参数类型说明
cpeStr1string第一个 CPE 字符串
cpeStr2string第二个 CPE 字符串
返回值类型说明
第 1 个bool匹配返回 true
第 2 个error解析失败时返回错误
go
ok, err := cpeskills.QuickMatch(
    "cpe:2.3:a:microsoft:windows:*:*:*:*:*:*:*:*",
    "cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*",
)

🏷️ StringToPart

go
func StringToPart(s string) (*Part, error)

将字符串转换为 Part 类型。

参数类型说明
sstring组件类型字符串(如 a/o/h
返回值类型说明
第 1 个*Part转换结果
第 2 个error非法值时返回错误
go
part, err := cpeskills.StringToPart("a")

📝 FormatCPE

go
func FormatCPE(cpe *CPE, version string) (string, error)

按指定 CPE 版本("2.2""2.3")格式化 CPE 对象。

参数类型说明
cpe*CPE待格式化的 CPE 对象
versionstring目标版本
返回值类型说明
第 1 个string格式化结果
第 2 个error版本非法时返回错误
go
cpe := cpeskills.MustParse("cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*")
s, _ := cpeskills.FormatCPE(cpe, "2.2")

🧬 Clone

go
func Clone(cpe *CPE) *CPE

深拷贝一个 CPE 对象。

参数类型说明
cpe*CPE被克隆的 CPE 对象
返回值类型说明
第 1 个*CPE克隆得到的新对象
go
cpe := cpeskills.MustParse("cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*")
clone := cpeskills.Clone(cpe)

🔁 CPEsToStrings

go
func CPEsToStrings(cpes []*CPE) []string

将 CPE 切片转换为字符串切片(按 2.3 URI 格式化)。

参数类型说明
cpes[]*CPECPE 对象切片
返回值类型说明
第 1 个[]stringURI 字符串切片
go
cpes := []*CPE{cpeskills.MustParse("cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*")}
strs := cpeskills.CPEsToStrings(cpes)

🔁 StringsToCPEs

go
func StringsToCPEs(strs []string) []*CPE

将字符串切片转换为 CPE 切片。无法解析的条目会被跳过。

参数类型说明
strs[]stringCPE 字符串切片
返回值类型说明
第 1 个[]*CPE解析得到的 CPE 切片
go
cpes := cpeskills.StringsToCPEs([]string{"cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*"})

🔎 FilterByPart

go
func FilterByPart(cpes []*CPE, part *Part) []*CPE

按组件类型过滤 CPE 列表。

参数类型说明
cpes[]*CPE待过滤的 CPE 列表
part*Part目标组件类型
返回值类型说明
第 1 个[]*CPE匹配的子集
go
part, _ := cpeskills.StringToPart("a")
apps := cpeskills.FilterByPart(cpes, part)

🔎 FilterByVendor

go
func FilterByVendor(cpes []*CPE, vendor string) []*CPE

按供应商过滤 CPE 列表。

参数类型说明
cpes[]*CPE待过滤的 CPE 列表
vendorstring目标供应商
返回值类型说明
第 1 个[]*CPE匹配的子集
go
ms := cpeskills.FilterByVendor(cpes, "microsoft")

🔎 FilterByProduct

go
func FilterByProduct(cpes []*CPE, product string) []*CPE

按产品名过滤 CPE 列表。

参数类型说明
cpes[]*CPE待过滤的 CPE 列表
productstring目标产品名
返回值类型说明
第 1 个[]*CPE匹配的子集
go
wins := cpeskills.FilterByProduct(cpes, "windows")

🏷️ GetPartName

go
func GetPartName(shortName string) string

将组件类型的短名(a/o/h)转换为完整名称。

参数类型说明
shortNamestring短名
返回值类型说明
第 1 个string完整名称
go
fmt.Println(cpeskills.GetPartName("a")) // application

🧭 便捷函数关系

Released under the MIT License.