gin

Go Gin Graceful-Shutdownについて

前回にてgin-gonic/ginで触りこぼしていたGraceful-Shutdownをちゃんと試してみました。 Graceful Shutdown 名前の通り終了処理にあたってセッションがクローズするまでなるべく待ってあげることです。 調べた結果は簡単に次の通りです。 Ginも標準パッケージもGraceful処理は変わらない contextで最長の待ち時間を決定できる Graceful-ShutdownのManuallyに記載されている方法をまずは試してみます。 $ curl localhost:8080 で5秒後に返信がきます。 $ go run main.go [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached. [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) [GIN-debug] GET / --> main.main.func1 (3 handlers) [GIN] 2020/08/25 - 15:19:54 | 200 | 5.003282194s | 127.0.0.1 | GET "/" ^C # <--- SIGINT 2020/08/25 15:19:58 Shutting down server.
Read more

Go Gin Validatorについて

前回にてgin-gonic/ginで触りこぼしていたValidatorをちゃんと試してみました。 Validator Model binding and validationに記載されているようにginではgo-playground/validatorを使っています。 Qiita: go-playground/validator リクエストパラメータ向けValidationパターンまとめで多くのパターンが整理されているので、こちらが参考になります。 QueryとBodyの両方で試しましたが、問題なくvalidateかけれていますね。 func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { var usr User if err := c.ShouldBindQuery(&usr); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, usr) }) r.POST("/", func(c *gin.Context) { var usr User if err := c.ShouldBindJSON(&usr); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, usr) }) r.Run(":8080") } type User struct { Name string `form:"name"` Age int `form:"age" binding:"required,max=10,min=5"` } # Test Query $ curl 'localhost:8080?
Read more

Go Gin packageの基本を触る

gin-gonic/ginが圧倒的な人気を誇っているので、README.mdにある一通りの機能でWebAPI(JSON format)の想定で関わりそうな機能を試していきます。 記載してあるコードはREADME.mdにあるコードを抜粋したり、改変したりして記載しています。 QuickStart とりあえずQuickStartのコードを試してみます。 package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) r.Run() } $ curl localhost:8080/ping {"message":"pong"} $ go run main.go [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached. [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) [GIN-debug] GET /ping --> main.
Read more