> 백엔드 개발 > Golang > 원본 코드를 수정하지 않고 Go에서 기존 유형을 어떻게 확장할 수 있나요?

원본 코드를 수정하지 않고 Go에서 기존 유형을 어떻게 확장할 수 있나요?

Susan Sarandon
풀어 주다: 2024-12-17 07:46:24
원래의
579명이 탐색했습니다.

How Can I Extend Existing Types in Go Without Modifying the Original Code?

Go에서 기존 유형 확장

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿