Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
469
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "context"
  5. "database/sql"
  6. "encoding/json"
  7. "flag"
  8. "log"
  9. "net/http"
  10. "os"
  11. "os/signal"
  12. "path"
  13. "syscall"
  14.  
  15. "github.com/go-chi/chi"
  16. )
  17.  
  18. type MyDatabase struct {
  19. ID int `json:"id"`
  20. Name string `json:"name"`
  21. }
  22.  
  23. func GetId(id string) MyDatabase {
  24. db, err := sql.Open("mysql", "root:2244@tcp(127.0.0.1:3306)/tags")
  25. if err != nil {
  26. log.Fatalf("Can't connect with MySQL, because %s", err)
  27. }
  28. defer db.Close()
  29. var s MyDatabase
  30. err = db.QueryRow("SELECT id, name FROM ExampleTable where id = ?", id).Scan(&s.ID, &s.Name)
  31. return s
  32. }
  33.  
  34. func main() {
  35. ctx := context.Background()
  36. configPath := flag.String("c", "config.yaml", "set config path")
  37. flag.Parse()
  38.  
  39. cfg, err := configure(*configPath)
  40. if err != nil {
  41. log.Fatalf("Can't configure, cause %s", err)
  42. }
  43.  
  44. r := chi.NewRouter()
  45. //localhost:8080/example/withid?id=22
  46. r.Get(path.Join(cfg.Name, "withid"), func(w http.ResponseWriter, req *http.Request) {
  47. id := req.URL.Query().Get("id")
  48. if id == "" {
  49. log.Println("ID param is missing")
  50. return
  51. }
  52. param := GetId(id)
  53. err := json.NewEncoder(w).Encode(param)
  54. if err != nil {
  55. log.Println(err)
  56. }
  57. })
  58.  
  59. server := &http.Server{
  60. Addr: cfg.ServerAddr,
  61. Handler: r,
  62. }
  63.  
  64. go func() {
  65. if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
  66. log.Fatal(err)
  67. }
  68. }()
  69.  
  70. log.Println("Start serving on", cfg.ServerAddr)
  71. defer server.Shutdown(ctx)
  72. // Прехватывание сигналов от операционной системы. Например, если ты нажмешь ctrl + c, то это будет syscall.SIGINT
  73. sgnl := make(chan os.Signal, 1)
  74. signal.Notify(sgnl,
  75. syscall.SIGHUP,
  76. syscall.SIGINT,
  77. syscall.SIGTERM,
  78. syscall.SIGQUIT)
  79. // Ждем сигнала, чтобы не завершился сразу мейн
  80. stop := <-sgnl
  81. log.Printf("Server stop with signal %s", stop.String())
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement