>백엔드 개발 >Golang >순환 종속성을 만들지 않고 Go 패키지를 등록하는 방법은 무엇입니까?

순환 종속성을 만들지 않고 Go 패키지를 등록하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-27 21:28:11246검색

How to Register Go Packages Without Creating Circular Dependencies?

순환 종속성을 만들지 않고 Go에서 패키지 등록

문제

여러 다른 패키지가 의존하는 인터페이스를 제공하는 중앙 패키지를 고려해보세요. 각 종속 패키지는 이러한 인터페이스의 여러 구현을 제공합니다. 목표는 클라이언트 인스턴스화를 활성화하기 위해 이러한 구현에 대해 중앙 패키지에 알리는 것이지만 중앙 패키지에서 종속 패키지를 가져오면 순환 종속성이 생성됩니다.

해결책

Go 표준 라이브러리는 다음과 같은 두 가지 접근 방식을 제공합니다. 이 문제를 해결하려면:

1. "중앙" 레지스트리가 없는 경우

  • 중앙 패키지에서 인터페이스를 정의하고 별도의 패키지에 구현을 캡슐화합니다.
  • 패키지 이름을 지정하여 원하는 구현을 명시적으로 인스턴스화합니다.
  • 예: crypto 패키지는 Hash 인터페이스를 정의하는 반면, 구체적인 구현은 crypto/md5 및 crypto/sha256.

2. "중앙" 레지스트리

  • 구현은 일반적으로 패키지 init() 함수를 통해 중앙 패키지에 등록됩니다.
  • 예: 이미지 패키지는 이미지 인터페이스와 여러 이미지 형식을 정의합니다. image/gif 및 image/jpeg와 같은 패키지로 구현

대체 솔루션(제안): "사용자 정의" 레지스트리

  • 중앙 패키지(pi)와 구현 패키지(예: pa, pb)를 모두 가져오는 중개자 패키지(예: pf)를 만듭니다.
  • 정의 pf와 다른 것 사이의 순환 종속성을 피하면서 클라이언트를 인스턴스화하는 pf의 "공장" 메소드 패키지.

권장 사항

최상의 솔루션은 요구 사항에 따라 다릅니다. 구현을 미리 선택할 수 있는 경우 옵션 1이 선호됩니다. 옵션 2는 확장성을 허용하지만 명시적인 등록이 필요합니다. 옵션 3은 편의성과 확장성 사이의 절충안을 제공합니다.

위 내용은 순환 종속성을 만들지 않고 Go 패키지를 등록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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