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 關注
- 232 瀏覽
添加回答
舉報