그래서 저는 최선의 방법이 무엇인지 궁금합니다. 나는 색상과 타임 스탬프 등으로 사용자 정의 로거를 사용하기 때문에 내가 여러 서브 패키지를 사용하여 응용 프로그램을Golang 패키지와 패키지간에 변수 사용하기
, 일부는
가 주입하여이를 달성하는 유일한 방법인가, 내가 메인 패키지에있는 로거에 액세스해야 그렇게 좋아하니?
type Handler struct {
logger logging.Logger
}
func NewHandler(logger logging.Logger) Handler {
return Handler{
logger: logger,
}
}
handler := command.NewHandler(logger)
나는이와 가지고이 문제는 내가 시험에 대한 로거를 조롱이 있기 때문에 테스트 성가신 될 것입니다 (처리기를 가정하면 서브 패키지 명령 호출에있다). 그래서 비동기 기능이나 경우 오류를 처리하는 방법을 나도 몰라 나는 기록하고 그들과 함께 주요 패키지 거래를하도록해야한다 다만 반환 오류에 대한 생각,하지만 난 그렇게
go handler.HandleMessage(msg)
같은 일부 기능 비동기를 실행하고 싶습니다 그것조차 가능하다.
그래서 내가 원하는 것을 수행하는 것이 가장 좋습니다. 이에
감사합니다. 익명의 함수는 좋은 생각입니다. 2에 대해 자세히 설명해 주시겠습니까? 나는 아무 것도 못 넘길 수 없다. "구체적인 유형"은 어떤 모습입니까? – gempir
logging.Logger가 인터페이스 인 경우에는 호출을 수행하기 위해 NewHandler에 구현을 전달해야합니다. 반면에 Log()가있는 struct {} 일 경우 (log * Logger) Log (msg string) 함수에서 log == nil인지 여부를 확인할 수 있습니다. 즉, 빈 Logger (예 : Handler {} 작성)는 여전히 유효하므로 초기화 할 필요가 없습니다. –
아, 그래 맞아. 제 경우에는 logging.Logger가 써드 파티 라이브러리의 인터페이스이기 때문에 래퍼를 써야합니다. – gempir