gin
前回にて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
前回にて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
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