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
}
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)
}
- 2 回答
- 0 关注
- 203 浏览
添加回答
举报