Skip to content

Instantly share code, notes, and snippets.

@yagihiro
Created March 12, 2018 08:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yagihiro/fd1e73bb8991adf97d8e7bfae10d4eb8 to your computer and use it in GitHub Desktop.
Save yagihiro/fd1e73bb8991adf97d8e7bfae10d4eb8 to your computer and use it in GitHub Desktop.
Minimal gin application
package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"time"
"github.com/gin-gonic/gin"
"github.com/joho/godotenv"
)
func main() {
if err := godotenv.Load(); err != nil {
log.Println("Warning: .env file not loading. " + err.Error())
}
engine := gin.Default()
engine.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
if port := os.Getenv("PORT"); port != "" {
srv := http.Server{
Addr: ":" + port,
Handler: engine,
}
go func() {
if err := srv.ListenAndServe(); err != nil {
log.Printf("ListenAndServe failed, err:" + err.Error())
}
}()
quit := make(chan os.Signal)
signal.Notify(quit, os.Interrupt, os.Kill)
<-quit
log.Printf("Shutdown server ...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
log.Fatalf("Server shutdown failed, err:" + err.Error())
}
log.Printf("Server exiting")
return
}
if sockFile := os.Getenv("SOCK_FILE"); sockFile != "" {
if err := engine.RunUnix(sockFile); err != nil {
log.Panicf("Cannot start a server, err:" + err.Error())
}
}
log.Panic("Cannot start a server, undefined PORT or SOCK_FILE environment")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment