문제:
인터페이스를 제공하고 다음에 의존하는 중앙 패키지가 있습니다. 해당 인터페이스의 구현을 제공하는 다른 패키지. 그러나 중앙 패키지에 이러한 종속 패키지를 포함하면 Go에서 허용하지 않는 순환 종속성이 생성됩니다.
표준 라이브러리 솔루션:
사용자 정의 레지스트리 솔루션:
최상의 솔루션 선택:
이상적인 접근 방식 특정 요구 사항에 따라 다릅니다.
코드 예 사용자 정의 레지스트리 솔루션:
// Package pi defines an interface I. package pi type I interface { // Some method. DoSomething() } // Package pa implements I with type A. package pa import "pi" type A struct{} func (a *A) DoSomething() { // Some implementation. } // Package pb implements I with type B. package pb import "pi" type B struct{} func (b *B) DoSomething() { // Some implementation. } // Package pf provides a factory to create instances of I. package pf import ( "pi" "pa" "pb" ) // NewClient returns an instance of I based on a flag. func NewClient(flag string) pi.I { switch flag { case "a": return &pa.A{} case "b": return &pb.B{} default: panic("Invalid flag") } }
위 내용은 순환 종속성을 만들지 않고 Go 패키지를 등록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!