GoLang:: 메서드 함수 할당 문제
🙈

GoLang:: 메서드 함수 할당 문제

Created
Jun 4, 2024 02:03 AM
Last edited time
Last updated June 4, 2024
Tags
Language
Language
GoLang
URL

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
 
 

References::

Loading Comments...