Golang의 웹 프레임워크는 gin, echo, beego 등 여러 가지가 존재한다. 하지만 gin를 주로 많이 사용하는 것 같다.
아래 이미지는 젯브레인에서 2020년에 실시한 개발자 에코시스템의 현황 중 Go 프로그래밍에 대한 내용의 일부이다.
Go 웹 프레임워크로 gin를 많이 사용하는 것을 알 수 있다.
예제
예제를 실행하기 앞서서 Go Modules프로젝트를 생성하자.
젯브레인 블로그에서 자세히 확인할 수 있다.
gin 패키지 추가
/ping를 호출하면 pong이라는 결과를 받는 간단한 예제이다.
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 (for windows "localhost:8080")
}
예제 코드를 추가하고 Sync packages... 버튼을 클릭해서 gin 패키지를 추가하자.
패키지도 받았으면 예제를 실행해보자.
실행하면 아래와 같은 결과 확인할 수 있다.
:포트번호에 원하는 포트번호를 입력해주면 된다.
r.Run(":포트번호")
// 8888포트를 사용하고 싶으면 다음과 같이 설정해주면 된다.
// r.Run(":8888")
파라미터
path에 파라미터를 추가하여 사용할 수 있다.
/user/:name 은 :name에 해당하는 경로를 파라미터로 받는다.
을 호출하게 되면 name은 gin를 전달받게 된다.
router.GET("/user/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, "Hello %s", name)
})
하위 경로를 묶어서 파라미터로 설정하려면 아래처럼 /user/name/A/B/C 로 호출을 하면 action 은 A/B/C를 전달받는다.
router.GET("/user/:name/*action", func(c *gin.Context) {
name := c.Param("name")
action := c.Param("action")
message := name + " is " + action
c.String(http.StatusOK, message)
})
쿼리
쿼리는 다음과 같이 처리하면 된다.
router.GET("/welcome", func(c *gin.Context) {
firstname := c.DefaultQuery("firstname", "Guest")
lastname := c.Query("lastname") // shortcut for c.Request.URL.Query().Get("lastname")
c.String(http.StatusOK, "Hello %s %s", firstname, lastname)
})
DefaultQuery 함수를 사용하게 되면 함수 이름과 같이 두 번째 오는 파라미터에 기본값을 설정할 수 있다. 아래 예제는 firstname파라미터 없이 호출하면 Guest가 기본값으로 설정된다.
/welcome?firstname=go&lastname=gin로 호출하면 Hello go gin이라는 결과를 얻을 수 있다.