golang의 기본 패키지들을 이용하여 웹프로그래밍을 공부하던 도중 햇갈리는 부분이 있어서 정리하려고 한다.
바로 코드를 보면서 이해해보자.
위 코드는 golang을 이용한 웹프로그래밍의 hello world이다.
코드에서 보다시피 localhost:8080/hello 주소로 들어가면 hello world가 찍혀있는 걸 볼 수 있다.
http.HandleFunc 함수의 경우 두번째 인자로 func(http.ResponseWriter, *http.Request) 형태로 이루어져 있는 함수를 받는다. 이 점을 기억해두면서 아래 코드들을 계속 보자.
차이점이 보이는가? http.HandleFunc 대신 http.Handle 함수를 사용하였고 이것도 실행된다는 것을 명확히 보여주기 위해 hello world 대신 bye world로 바꿔주었다. 아래는 실행 결과이다.
http.Handle의 두번째 인자를 보면 http.HandlerFunc라는 함수가 사용되었고 이 HandlerFunc의 역할을 정확히 알아보는것이 이번 포스팅의 목적이다.
우선 http.HandleFunc와 http.Handle의 차이점 중에 하나는 두번째 인자의 타입에 있다.
HandleFunc의 경우 위에서 말했듯이 두번째 인자로 func(http.ResponseWriter, *http.Request) 형태로 이루어져 있는 함수를 받는다.
Handle의 경우 위에서 나와있는 것처럼 Handler type을 받는다.
그럼 Handler type은 도대체 뭘까?
위 사진에서 보다시피 Handler란 interface를 정의한것이고 ServeHTTP 함수를 정의해야 Handler interface가 된다.
(혹시 위 말이 이해가 안간다면 golang interface의 기초에 대해 공부가 필요하니 공부하고 오자)
자 그럼 위의 a 함수가 http.Handle의 두번째 인자로 들어가기 위해서는 a 함수가 Handler interface가 되어야 하는데 이걸 도와주는게 http.HandlerFunc 함수이다.
HandlerFunc에 대해 조금 더 알아보자
사진에 나와있듯이 HandlerFunc type은 ServeHTTP함수를 가지고 있고 이는 HandlerFunc type은 Handler interface란 뜻이다.
그러므로 HandlerFunc(a)를 하면 함수 a는 결국 Handler interface가 되기 때문에 작동되는 것이다.
'golang' 카테고리의 다른 글
golang과 함께 알아보는 쿠키 (0) | 2020.12.09 |
---|---|
golang 정렬하기 (0) | 2020.10.22 |
golang에서 slice VS linkedlist (0) | 2020.05.22 |
golang에서의 slicing (0) | 2020.05.18 |
golang에서의 문자열 처리 (0) | 2020.05.13 |