init()

What is the execution sequence of init() in the go files below.

  1. // A/a1.go
  2. package A
  3. func init() {
  4. println("a1")
  5. }
  6. var A1 = ""
  7. // A/a2.go
  8. package A
  9. func init() {
  10. println("a2")
  11. }
  12. var A2 = ""
  13. // B/b1.go
  14. package B
  15. func init() {
  16. println("b1")
  17. }
  18. var B1 = ""
  19. // B/b2.go
  20. package B
  21. import "github.com/test/A"
  22. func init() {
  23. println("b2")
  24. }
  25. func f() {
  26. _ = A.A2
  27. }
  28. var B2 = ""
  29. // C/main.go
  30. package main
  31. import (
  32. "github.com/test/B"
  33. )
  34. func main() {
  35. _ = B.B2
  36. }

Answer

  1. a1
  2. a2
  3. b1
  4. b2