Skip to content

🌐 软件生态系统

Ecosystem 标识软件包所属的包管理器/注册表,是 PURL 与 SBOM 处理的核心概念。本模块声明 Ecosystem 类型、所有导出的生态系统常量、EcosystemInfo 元数据结构体,以及查询、标准化和基于 CPE 推断的辅助函数。

类型:Ecosystem

go
type Ecosystem string

包生态系统的字符串类型标识符。

常量

go
const (
    EcosystemNPM      Ecosystem = "npm"
    EcosystemMaven    Ecosystem = "maven"
    EcosystemPyPI     Ecosystem = "pypi"
    EcosystemGo       Ecosystem = "golang"
    EcosystemNuGet    Ecosystem = "nuget"
    EcosystemDocker   Ecosystem = "docker"
    EcosystemRubyGems Ecosystem = "gem"
    EcosystemCargo    Ecosystem = "cargo"
    EcosystemComposer Ecosystem = "composer"
    EcosystemConan    Ecosystem = "conan"
    EcosystemConda    Ecosystem = "conda"
    EcosystemHex      Ecosystem = "hex"
    EcosystemPub      Ecosystem = "pub"
    EcosystemSwift    Ecosystem = "swift"
    EcosystemAlpine   Ecosystem = "alpine"
    EcosystemDebian   Ecosystem = "deb"
    EcosystemRPM      Ecosystem = "rpm"
    EcosystemGeneric  Ecosystem = "generic"
)
常量说明
EcosystemNPMnpmNode.js 包管理器(npm)
EcosystemMavenmavenJava/Kotlin 项目(Maven Central、Google Android)
EcosystemPyPIpypiPython 包索引
EcosystemGogolangGo 模块
EcosystemNuGetnuget.NET 包管理器
EcosystemDockerdockerDocker 容器镜像
EcosystemRubyGemsgemRuby 包管理器
EcosystemCargocargoRust 包管理器
EcosystemComposercomposerPHP 包管理器
EcosystemConanconanC/C++ 包管理器
EcosystemCondaconda跨语言包管理器
EcosystemHexhexElixir/Erlang 生态系统
EcosystemPubpubDart/Flutter 包管理器
EcosystemSwiftswiftSwift 包管理器
EcosystemAlpinealpineAlpine Linux(apk)包
EcosystemDebiandebDebian/Ubuntu(deb)包
EcosystemRPMrpmRed Hat/Fedora(rpm)包
EcosystemGenericgeneric通用/未知生态系统

类型:EcosystemInfo

go
type EcosystemInfo struct {
    Name        string
    FullName    string
    RegistryURL string
    PURLType    string
}
字段类型说明
Namestring生态系统名称
FullNamestring生态系统全名
RegistryURLstring默认注册表 URL
PURLTypestringPURL type 字段值

ℹ️ GetEcosystemInfo

go
func GetEcosystemInfo(ecosystem Ecosystem) (EcosystemInfo, error)

返回指定生态系统的元数据。

参数类型说明
ecosystemEcosystem待查询的生态系统
返回值类型说明
#1EcosystemInfo生态系统元数据,出错时为零值
#2error生态系统未知时非 nil
go
info, err := cpeskills.GetEcosystemInfo(cpeskills.EcosystemMaven)
if err != nil {
    log.Fatal(err)
}
fmt.Println(info.FullName, info.RegistryURL)
// Maven Central https://repo.maven.apache.org/maven2

📜 ListEcosystems

go
func ListEcosystems() []Ecosystem

返回所有已注册的生态系统。顺序未指定(按 map 迭代顺序)。

返回值类型说明
#1[]Ecosystem所有已注册生态系统
go
for _, eco := range cpeskills.ListEcosystems() {
    fmt.Println(eco)
}

🔁 EcosystemFromPURLType

go
func EcosystemFromPURLType(purlType string) Ecosystem

将 PURL type 字段映射为 Ecosystem,无匹配时返回 EcosystemGeneric

参数类型说明
purlTypestringPURL type 字符串
返回值类型说明
#1Ecosystem匹配的生态系统,或 EcosystemGeneric
go
fmt.Println(cpeskills.EcosystemFromPURLType("cargo")) // cargo
fmt.Println(cpeskills.EcosystemFromPURLType("unknown")) // generic

✅ IsEcosystemSupported

go
func IsEcosystemSupported(ecosystem Ecosystem) bool

检查生态系统是否已注册。

参数类型说明
ecosystemEcosystem待检查的生态系统
返回值类型说明
#1bool已注册时为 true
go
fmt.Println(cpeskills.IsEcosystemSupported(cpeskills.EcosystemNPM)) // true

💡 CPEPartToEcosystemHint

go
func CPEPartToEcosystemHint(part *Part) []Ecosystem

按启发式返回 CPE Part 可能所属的生态系统列表,用于辅助 CPE→PURL 映射。应用程序(a)映射到大多数包生态系统;操作系统(o)映射到 Linux 发行版生态系统;硬件(h)映射到 EcosystemGenericpart 为 nil 时返回 nil

参数类型说明
part*PartCPE part
返回值类型说明
#1[]Ecosystem候选生态系统,part 为 nil 时为 nil
go
hints := cpeskills.CPEPartToEcosystemHint(cpeskills.PartApplication)
fmt.Println(hints) // [npm maven pypi golang ...]

🧹 NormalizeEcosystemName

go
func NormalizeEcosystemName(name string) (Ecosystem, error)

标准化生态系统名称,支持常见别名,如 node.jsEcosystemNPMjavaEcosystemMavenpythonEcosystemPyPI。无别名匹配时回退为 Ecosystem(name) 直接匹配。

参数类型说明
namestring待标准化的名称或别名
返回值类型说明
#1Ecosystem标准化后的生态系统,出错时为空
#2error名称未知时非 nil
go
eco, err := cpeskills.NormalizeEcosystemName("node.js")
if err != nil {
    log.Fatal(err)
}
fmt.Println(eco) // npm

📐 生态系统注册表图

Released under the MIT License.