为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
喵喔喔 2021-09-21 17:40:30
在go list -json命令行运行的命令会告诉你一展身手程序的进口和依赖关系(JSON格式)。有没有办法从 go 程序中获取这些信息,即在运行时,通过以某种方式或其他方式运行“go list”命令?
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

我认为不使用 go 二进制文件就无法做到这一点,因为 go 需要分析您的源代码。


这很容易做到,但它必须能够在运行时访问 go 和源代码。这是一个快速示例:


package main


import (

    "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

}


查看完整回答
反对 回复 2021-09-21
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

以下代码使用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)

}


查看完整回答
反对 回复 2021-09-21
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信