码迷,mamicode.com
首页 > 其他好文 > 详细

如何获取一个package或go文件的所有依赖

时间:2019-11-08 18:58:47      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:pkg   如何获取   src   encoding   intern   直接   文件的   file path   编译器   

通过go list命令可以获取到一个包或文件的所有依赖。

go list -e -json {packagename or go file path}

查看golang的源码可以发现,通过"cmd/go/internal/load"的Packages函数可以获取到项目的依赖信息,但是,这里面有一个问题,internal包是收到保护的,是不允许进行引用的(编译器编译不过),此时,需要copy一份源码出来,将其转换为可以直接调用的package。

package main

import (
    "encoding/json"
    "fmt"

    "github.com/golangaccount/cmd.go.internal/load"
)

func main() {
    loadpkgs := load.Packages

    for _, pkg := range loadpkgs([]string{`C:\project\src\cmd\cmd.go`}) {
        // Show vendor-expanded paths in listing
        pkg.TestImports = pkg.Vendored(pkg.TestImports)
        pkg.XTestImports = pkg.Vendored(pkg.XTestImports)

        bt, _ := json.Marshal(pkg.PackagePublic)
        fmt.Println(string(bt))
    }

}

如何获取一个package或go文件的所有依赖

标签:pkg   如何获取   src   encoding   intern   直接   文件的   file path   编译器   

原文地址:https://www.cnblogs.com/zp900704/p/11822239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!