>백엔드 개발 >Golang >Go에서 기존 유형에 메서드를 어떻게 추가할 수 있나요?

Go에서 기존 유형에 메서드를 어떻게 추가할 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2025-01-03 10:07:39765검색

How Can I Add Methods to Existing Types in Go?

Go에서 기존 유형 확장

가져온 패키지의 기존 유형에 사용자 정의 메소드를 추가하려고 하면 다음과 같은 오류가 발생할 수 있습니다. 로컬이 아닌 유형에서는 새 메소드를 정의할 수 없습니다. 이 제한은 다른 곳에 정의된 유형에 대한 수정을 허용하지 않는 Go의 유형 시스템에서 비롯됩니다.

이 제한을 우회하려면 두 가지 기본 접근 방식이 있습니다.

  1. 다음을 사용하여 새 유형 정의 익명 필드: 여기에는 원래 유형을 익명 필드로 포함하는 새 유형을 생성하는 작업이 포함됩니다. 그런 다음 새 유형에 사용자 정의 메소드를 추가할 수 있습니다.
type MyRoute struct {
    *mux.Route
}

func (m *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route {
    return m.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}

type MyRouter struct {
    *mux.Router
}

func (r *MyRouter) Subroute(tpl string, h http.Handler) *mux.Route {
    return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}
  1. 기존 유형 포함: 익명 포함 대신 다음을 사용하여 기존 유형을 명시적으로 포함할 수 있습니다. 삽입 키워드. 이를 통해 추가 메소드를 정의하는 동시에 원래 유형의 필드 및 메소드에 액세스할 수 있습니다.
type MyRoute embed mux.Route

func (m *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route {
    return m.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}

type MyRouter embed mux.Router

func (r *MyRouter) Subroute(tpl string, h http.Handler) *mux.Route {
    return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}

위 내용은 Go에서 기존 유형에 메서드를 어떻게 추가할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.