buildinfo.go raw
1 package version
2
3 import (
4 "fmt"
5 "runtime/debug"
6 )
7
8 func printBuildInfo() {
9 if info, ok := debug.ReadBuildInfo(); ok {
10 fmt.Println("Main module:")
11 printModule(&info.Main)
12 fmt.Println("Dependencies:")
13 for _, dep := range info.Deps {
14 printModule(dep)
15 }
16 } else {
17 fmt.Println("Built without Go modules")
18 }
19 }
20
21 func buildInfoVersion() (string, bool) {
22 info, ok := debug.ReadBuildInfo()
23 if !ok {
24 return "", false
25 }
26 if info.Main.Version == "(devel)" {
27 return "", false
28 }
29 return info.Main.Version, true
30 }
31
32 func printModule(m *debug.Module) {
33 fmt.Printf("\t%s", m.Path)
34 if m.Version != "(devel)" {
35 fmt.Printf("@%s", m.Version)
36 }
37 if m.Sum != "" {
38 fmt.Printf(" (sum: %s)", m.Sum)
39 }
40 if m.Replace != nil {
41 fmt.Printf(" (replace: %s)", m.Replace.Path)
42 }
43 fmt.Println()
44 }
45