Intro::
메서드 함수 할당 문제에 대한 내용입니다.
문제 상황
// movieController var queryManager func(map[string]string) (result []interface{}, cerr customerror.CustomError) queryManager = handler.MovieHandler.EsSearchAllMovies// 아래와 같은 에러 발 /* cannot use handler.MovieHandler.EsSearchAllMovies (value of type func(_ handler.MovieHandler, param map[string]string) ([]interface{}, customerror.CustomError)) as func(map[string]string) (result []interface{}, cerr customerror.CustomError) value in assignmentcompilerIncompatibleAssign */
문제 이유
go 에서 메서드는 암묵적으로 해당 메서드의 리시버 타입의 인스턴스를 첫 번째 인자로 받습니다. 이에 대한 타입이 맞지 않기 때문에 에러가 발생합니다.
문제 해결 방법
// 래퍼 함수를 사용하는 방법 func EsSearchAllMoviesFunc(handler MovieHandler, param map[string]string) ([]interface{}, customerror.CustomError) { return handler.EsSearchAllMovies(param) }
// movieHandler type MovieHandler interface { EsSearchAllMovies(param map[string]string) ([]interface{}, customerror.CustomError) EsSearchNameMovie(param map[string]string) ([]interface{}, customerror.CustomError) } type MovieHandlerImpl struct{} func (h *MovieHandlerImpl) EsSearchAllMovies(param map[string]string) (result []interface{}, cerr customerror.CustomError) { // 구현 } // movieController var queryManager func(handler.MovieHandler, map[string]string) (result []interface{}, cerr customerror.CustomError) queryManager = handler.MovieHandler.EsSearchAllMovies
Loading Comments...