buildinfo.go 816 B

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