Skip to content

Instantly share code, notes, and snippets.

@mark-rushakoff
Created September 19, 2019 17:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mark-rushakoff/8c08efaf1c0dc75b4032dc0b35b34c1f to your computer and use it in GitHub Desktop.
Save mark-rushakoff/8c08efaf1c0dc75b4032dc0b35b34c1f to your computer and use it in GitHub Desktop.
Print out all the files required to build a single Go package.
package main
import (
"fmt"
"os"
"golang.org/x/tools/go/packages"
)
func main() {
target := os.Args[1]
cfg := &packages.Config{
Mode: packages.NeedName | packages.NeedFiles | packages.NeedImports | packages.NeedDeps,
}
pkgs, err := packages.Load(cfg, target)
if err != nil {
panic(err)
}
seen := map[string]bool{}
for _, p := range pkgs {
dumpPkg(p, seen)
}
}
func dumpPkg(p *packages.Package, seen map[string]bool) {
if seen[p.PkgPath] {
return
}
seen[p.PkgPath] = true
fmt.Println("---------------------")
fmt.Println("Name: " + p.Name)
fmt.Println("Path: " + p.PkgPath)
fmt.Println("Go files:")
for _, f := range p.GoFiles {
fmt.Println("\t" + f)
}
for _, i := range p.Imports {
dumpPkg(i, seen)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment