Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "context"
- "database/sql"
- "encoding/json"
- "flag"
- "log"
- "net/http"
- "os"
- "os/signal"
- "path"
- "syscall"
- "github.com/go-chi/chi"
- )
- type MyDatabase struct {
- ID int `json:"id"`
- Name string `json:"name"`
- }
- func GetId(id string) MyDatabase {
- db, err := sql.Open("mysql", "root:2244@tcp(127.0.0.1:3306)/tags")
- if err != nil {
- log.Fatalf("Can't connect with MySQL, because %s", err)
- }
- defer db.Close()
- var s MyDatabase
- err = db.QueryRow("SELECT id, name FROM ExampleTable where id = ?", id).Scan(&s.ID, &s.Name)
- return s
- }
- func main() {
- ctx := context.Background()
- configPath := flag.String("c", "config.yaml", "set config path")
- flag.Parse()
- cfg, err := configure(*configPath)
- if err != nil {
- log.Fatalf("Can't configure, cause %s", err)
- }
- r := chi.NewRouter()
- //localhost:8080/example/withid?id=22
- r.Get(path.Join(cfg.Name, "withid"), func(w http.ResponseWriter, req *http.Request) {
- id := req.URL.Query().Get("id")
- if id == "" {
- log.Println("ID param is missing")
- return
- }
- param := GetId(id)
- err := json.NewEncoder(w).Encode(param)
- if err != nil {
- log.Println(err)
- }
- })
- server := &http.Server{
- Addr: cfg.ServerAddr,
- Handler: r,
- }
- go func() {
- if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
- log.Fatal(err)
- }
- }()
- log.Println("Start serving on", cfg.ServerAddr)
- defer server.Shutdown(ctx)
- // Прехватывание сигналов от операционной системы. Например, если ты нажмешь ctrl + c, то это будет syscall.SIGINT
- sgnl := make(chan os.Signal, 1)
- signal.Notify(sgnl,
- syscall.SIGHUP,
- syscall.SIGINT,
- syscall.SIGTERM,
- syscall.SIGQUIT)
- // Ждем сигнала, чтобы не завершился сразу мейн
- stop := <-sgnl
- log.Printf("Server stop with signal %s", stop.String())
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement