echo 프레임워크를 이용해 Parameter 받는 방법(Query Param, Path Val)
URI를 이용해서 인자를 전달하는 방법은 여러 가지가 있습니다. 가장 대중적으로 사용하는 Query Parameter
와 Path Variable
에 대해 정리해보겠습니다.
Query Parameter
입력
http://localhost:8080/users/?name=wookii&age=27
위와 같이 Query Parameter의 형태로 전달받은 데이터는 echo.Context.QueryParam()
메서드나 echo.Context.QueryParams()
메서드로 처리할 수 있습니다.
소스 코드 1
type users struct {
name string
age int
}
func queryParamHandler(c echo.Context) error {
name := c.QueryParam("name")
age, err := strconv.Atoi(c.QueryParam("age"))
if err != nil {
return err
}
return c.JSONPretty(http.StatusOK, users{name: name, age: age}, " ")
}
func queryParamsHandler(c echo.Context) error {
qParams := c.QueryParams()
name := qParams["name"][0]
age, err := strconv.Atoi(qParams["age"][0])
if err != nil {
return err
}
return c.JSONPretty(http.StatusOK, users{name: name, age: age}, " ")
}
두 방식은 큰 차이가 없습니다. 원하는 메서드를 사용하면 됩니다.
다만, Query Parameter에 age
라는 인자가 optional이면 이야기가 달라집니다. 첫번째 방식의 경우에는 age
가 반드시 있어야 합니다. 그렇지 않으면 에러가 발생합니다. 두번째 방식도 마찬가지로 에러가 발생하지만, 코드를 일부 수정하면 에러를 막을 수 있습니다. 다음과 같이 바꿔봅니다.
소스 코드 2
func queryParamsHandler(c echo.Context) error {
var name string
var age int
qParams := c.QueryParams()
if val, ok := qParams["name"]; ok {
name = val[0]
}
if val, ok := qParams["age"]; ok {
age, err = strconv.Atoi(val[0])
if err != nil {
return err
}
}
return c.JSONPretty(http.StatusOK, users{name: name, age: age}, " ")
}
위의 코드처럼 수정하면 인자가 없는 경우에도 정상적으로 동작하게 됩니다.
Path Variable
입력
http://localhost:8080/users/name/wookii/age/27
Path Variable로 받은 인자는 echo.Context.Param()
, echo.Context.ParamNames()
, echo.Context.ParamValues()
로 처리할 수 있습니다.
Param()
Path Variable로 받은 인자 중, input으로 받은 인자를 리턴합니다.
ParamNames()
Path Variable로 받은 인자들의 Path Parameter 이름의 Slice를 리턴합니다.
ParamValues()
Path Variable로 받은 인자들의 실제 값의 Slice를 리턴합니다.
소스 코드 1
func pathParamHandler(c echo.Context) error {
name := c.Param("name")
age, err := strconv.Atoi(c.Param("age"))
if err != nil {
return err
}
return c.JSONPretty(http.StatusOK, users{name: name, age: age}, " ")
}
반응형
'IT > Go' 카테고리의 다른 글
[Go/Golang] Golang의 문자열 읽기에 관한 고찰(Reader, Scanner, Scanln) (0) | 2021.03.08 |
---|---|
[Go/Golang] Echo 프레임워크에서 CORS 관련 설정하기 (0) | 2021.03.04 |
[Go/Golang] JSON 데이터 형식에 맞춰 Struct를 자동으로 생성해주는 사이트 (0) | 2021.03.02 |
[Go/Golang] Golang에서 Windows 파일 경로 지정하기 (0) | 2021.02.23 |
[Go/Golang] Raw(`) string과 Interpreted(") string의 차이점을 알아보자 (0) | 2021.02.22 |