For listing installed packages using GOPATH
, please see this old thread: How to list installed go packages
The following applies to the new module mode.
At compile / build time
You may use the go list -m all
command to view final versions that will be used in a build for all direct and indirect dependencies (source). You can read more details about this here: Modules: Version Selection.
At runtime
At runtime (from your application) you may use the debug.ReadBuildInfo()
function:
ReadBuildInfo returns the build information embedded in the running binary. The information is available only in binaries built with module support.
Note: debug.ReadBuildInfo()
was only added in Go 1.12 (released just a day ago).
Example getting and printing build info (recursively). Easiest is to JSON-marshal the build info:
bi, ok := debug.ReadBuildInfo()
if !ok {
fmt.Println("Getting build info failed (not in module mode?)!")
return
}
enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", " ")
if err := enc.Encode(bi); err != nil {
panic(err)
}
Example output
Example output for a project which has a single dependency: github.com/globalsign/mgo
).
Running go list -m all
:
mytest
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8
Getting and JSON-marshaling the build info at runtime:
{
"Path": "mytest",
"Main": {
"Path": "mytest",
"Version": "(devel)",
"Sum": "",
"Replace": null
},
"Deps": [
{
"Path": "github.com/globalsign/mgo",
"Version": "v0.0.0-20181015135952-eeefdecb41b8",
"Sum": "h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is=",
"Replace": null
}
]
}