查找 go 程序的导入和依赖项

go list -json命令行运行的命令会告诉你一展身手程序的进口和依赖关系(JSON格式)。有没有办法从 go 程序中获取这些信息,即在运行时,通过以某种方式或其他方式运行“go list”命令?


喵喔喔
浏览 208回答 2
2回答

守候你守候我

我认为不使用 go 二进制文件就无法做到这一点,因为 go 需要分析您的源代码。这很容易做到,但它必须能够在运行时访问 go 和源代码。这是一个快速示例:package mainimport (    "encoding/json"    "fmt"    "os/exec")func main() {    cmd := exec.Command("go", "list", "-json")    stdout, err := cmd.Output()    if err != nil {        println(err.Error())        return    }    var list GoList    err = json.Unmarshal(stdout, &list)    for _, d := range list.Deps {        fmt.Printf(" - %s\n", d)    }}type GoList struct {    Dir        string    ImportPath string    Name       string    Target     string    Stale      bool    Root       string    GoFiles    []string    Imports    []string    Deps       []string}

慕姐8265434

以下代码使用go/build获取当前工作目录中应用程序的导入。p, err := build.Default.Import(".", ".", 0)if err != nil {   // handle error}for _, i := range p.Imports {   fmt.Println(i)}您可以使用简单的递归函数构建所有依赖项的列表。要获取特定的导入path,请使用:p, err := build.Default.Import(path, ".", 0)if err != nil {   // handle error}for _, i := range p.Imports {   fmt.Println(i)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go