亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找 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 關注
  • 232 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號