Go언어의 대표적인 마이크로 웹 프레임워크 입니다. Python
과 Flask
의 관계와 비슷 합니다.
Gin
은 MIT 라이선스를 사용합니다.
https://github.com/gin-gonic/gin/blob/master/LICENSE
다음 명령으로 Gin
을 받습니다.
go get github.com/gin-gonic/gin
간단한 서버를 만들자
main.go
를 다음처럼 작성 후 실행합니다.
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() // listen and serve on 0.0.0.0:8080
}
$ 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.main.func1 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
웹 브라우저로 localhost:8080/ping
에 접속하면 다음처럼 pong
메세지가 응답 됩니다.
Gin 엔진 만들기 (Gin 라우터)
r := gin.Default()
r := gin.New()
Default()
함수로 Gin
엔진을 만듭니다. 로거 없는 엔진을 사용하려면 New()
함수를 사용합니다.
라우팅 설정
URI 바인딩
r.GET("/url/path", handleFunc)
r.POST("/url/path", handleFunc)
r.HEAD("/url/path", handleFunc)
r.OPTIONS("/url/path", handleFunc)
r.PUT("/url/path", handleFunc)
r.DELETE("/url/path", handleFunc)
r.Handle("GET", "/url/path", handleFunc)
위 함수로 라우팅을 설정 합니다.
첫 번째 인자로 라우팅 할 URL을, 두번째 인자로 핸들 함수를 넣어줍니다.
:
와 *
로 파라미터를 사용할 수 있습니다.
1. r.GET("/user/:name", ... )
2. r.GET("/user/:name/*action", ... )
3. r.GET("/user/groups", ... )
-
/user/jhon
,/user/chris
에 매칭 됩니다./user
,/user/
는 매칭되지 않습니다. /user/jhon/
,/user/jhon/info
,/user/jhon/info/age
에 매칭 됩니다./user/groups
는 1번에 매칭되지 않고, 본 함수에 매칭 됩니다.
핸들러 함수
핸들 함수는 다음처럼 함수를 선언 하거나
func main() {
r := gin.New()
r.GET("/url/path", handleFunc)
r.Run() // listen and serve on 0.0.0.0:8080
}
func handleFunc(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "ok",
})
}
익명 함수를 사용하거나
func main() {
r := gin.New()
handleFunc := func (c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "ok",
})
}
r.GET("/url/path", handleFunc)
r.Run() // listen and serve on 0.0.0.0:8080
}
인 라인으로 사용합니다.
func main() {
r := gin.New()
r.GET("/url/path", func (c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "ok",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
핸들 함수는 다음처럼 *gin.Context
를 인자로 받고 리턴이 없는 함수로 작성 합니다.
func handleFunc(c *gin.Context) {
return
}