Go에서는 다른 패키지의 기존 유형 확장이 직접 지원되지 않습니다. 그러나 유사한 기능을 달성하기 위한 대체 기술이 있습니다.
한 가지 접근 방식은 기존 유형을 익명 필드로 포함하는 새로운 유형을 정의하는 것입니다. 이를 통해 원본을 수정하지 않고도 새 유형에 추가 메서드를 정의할 수 있습니다. 예는 다음과 같습니다.
type MyRoute struct { mux.Route } func (r *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route { return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) }
또 다른 옵션은 기존 유형을 명명된 필드로 직접 포함하고 포인터를 사용하여 포함된 유형에 액세스하고 확장하는 것입니다.
type MyRouter struct { *mux.Router } func (r *MyRouter) Subroute(tpl string, h http.Handler) *mux.Route { return r.Router.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) }
어떤 경우에는 기존 유형에 추가 기능을 제공하는 확장 패키지입니다. 그러나 이를 위해서는 원본 패키지의 소스 코드를 수정해야 하며 일반적으로 공유 라이브러리에는 권장되지 않습니다.
적절한 접근 방식은 프로젝트의 특정 요구 사항 및 제한 사항에 따라 다릅니다. 기존 유형에 직접 접근하여 수정해야 한다면 임베딩이 적합할 수 있습니다. API에서 기본 유형을 숨기려면 익명 필드를 사용하는 것이 좋습니다. 원본 소스 코드를 자유롭게 수정할 수 있는 경우 확장 패키지를 살펴보세요.
위 내용은 원본 코드를 수정하지 않고 Go에서 기존 유형을 어떻게 확장할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!