Golang中如何列出包及其版本

Golang中如何列出包及其版本 如何列出包的版本?

我找不到相关信息。我原以为它会在 go list 命令下。

4 回复

完全不清楚你想要做什么。你想列出哪些包(模块?)的哪些版本?你想在哪里进行这个操作?

更多关于Golang中如何列出包及其版本的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


例如,当我执行这个命令时,我获取到了所有的包/模块:

go list ...

有没有办法查看每个包/模块的版本?

请尝试

$ go list -m  all

详情请参阅 https://golang.org/cmd/go/#hdr-List_packages_or_modules

在Go中,可以使用 go list -m -versions <module-path> 命令列出模块的所有可用版本。例如:

# 列出标准库 fmt 的所有版本(实际是 go 版本)
go list -m -versions std

# 列出第三方模块如 github.com/gin-gonic/gin 的所有版本
go list -m -versions github.com/gin-gonic/gin

# 列出当前模块的所有依赖及其版本
go list -m all

# 列出特定模块的当前版本和可用版本
go list -m -versions -u github.com/gin-gonic/gin

如果需要以编程方式获取,可以使用 go list -m -json -versions <module-path> 并解析JSON输出:

package main

import (
    "encoding/json"
    "fmt"
    "os/exec"
)

type ModuleInfo struct {
    Path     string   `json:"Path"`
    Versions []string `json:"Versions,omitempty"`
}

func main() {
    cmd := exec.Command("go", "list", "-m", "-json", "-versions", "github.com/gin-gonic/gin")
    output, err := cmd.Output()
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    var info ModuleInfo
    if err := json.Unmarshal(output, &info); err != nil {
        fmt.Println("JSON parse error:", err)
        return
    }

    fmt.Printf("Module: %s\n", info.Path)
    fmt.Println("Available versions:")
    for _, v := range info.Versions {
        fmt.Println("  ", v)
    }
}

对于当前项目的依赖,使用 go list -m all 会显示所有直接和间接依赖及其选定的版本。

回到顶部