웹 서버를 구동하기 위한 Run 메서드를 Server 타입에 정의해 보자.
▼ server.go
func (s *Server) Run(addr string) { // startHandler를 라우터 핸들러 함수로 지정 s.startHandler = s.router.handler() // 등록된 미들웨어를 라우터 핸들러 앞에 하나씩 추가 for i := len(s.middlewares) - 1; i >= 0; i-- { s.startHandler = s.middlewares[i](s.startHandler) } // 웹 서버 시작 if err := http.ListenAndServe(addr, s); err != nil { panic(err) } }
먼저 startHandler를 router의 handler 메서드를 실행하여 얻은 핸들러로 지정하고, 등록된 미들웨어들을 라우터 핸들러 앞에 하나씩 추가했다.