Guest User

Untitled

a guest
Apr 4th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "database/sql"
  5. "fmt"
  6. "log"
  7. "time"
  8.  
  9. _ "github.com/lib/pq"
  10. )
  11.  
  12. type State struct {
  13. ID int
  14. Name string
  15. Parks []Park
  16. }
  17.  
  18. type Park struct {
  19. ID int
  20. Name string
  21. Description string
  22. NearestCity string
  23. Visitors int
  24. Established time.Time
  25. StateID int
  26. State State
  27. }
  28.  
  29. func main() {
  30.  
  31. const (
  32. host = "172.17.0.2"
  33. port = 5432
  34. user = "postgres"
  35. password = "P@ssw0rd!"
  36. dbname = "national_parks"
  37. )
  38.  
  39. connectionString := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
  40. host, port, user, password, dbname)
  41.  
  42. db, err := sql.Open("postgres", connectionString)
  43. if err != nil {
  44. log.Fatal("DB Conn error: ", err)
  45. }
  46.  
  47. if err = db.Ping(); err != nil {
  48. log.Fatal("DB Ping error: ", err)
  49. }
  50. defer db.Close()
  51. query := `
  52. Select
  53. p.id,
  54. p.name,
  55. p.description,
  56. p.nearest_city,
  57. p.visitors,
  58. p.established,
  59. p.state_id,
  60. s.id,
  61. s.name
  62. FROM parks as p
  63. LEFT OUTER JOIN states as s
  64. ON s.ID=p.state_id;`
  65.  
  66. rows, err := db.Query(query)
  67. if err != nil {
  68. log.Fatal("DB Query error: ", err)
  69. }
  70. defer rows.Close()
  71.  
  72. var parks []*Park
  73. var states []*State
  74. for rows.Next() {
  75. var p = &Park{}
  76. var s = &State{}
  77. if err := rows.Scan(
  78. &p.ID,
  79. &p.Name,
  80. &p.Description,
  81. &p.NearestCity,
  82. &p.Visitors,
  83. &p.Established,
  84. &p.StateID,
  85. &s.ID,
  86. &s.Name); err != nil {
  87. log.Fatal(err)
  88. }
  89. p.State.ID = s.ID
  90. p.State.Name = s.Name
  91. parks = append(parks, p)
  92. s.Parks = append(s.Parks, *p)
  93. states = append(states, s)
  94. }
  95.  
  96. for _, p := range parks {
  97. fmt.Printf("%v", p)
  98. }
  99.  
  100. for _, s := range states {
  101. fmt.Printf("%v", s)
  102. }
  103. }
Add Comment
Please, Sign In to add comment