Go에서 추상 클래스 구현
Go에서는 추상 클래스가 기본적으로 지원되지 않습니다. 그러나 다음과 같은 접근 방식을 사용하여 추상 클래스 동작을 에뮬레이션하는 것이 가능합니다.
예
start 및 doWork 메소드를 사용하여 추상 유형 Daemon을 정의하는 다음 코드를 고려하세요.
type Daemon interface { start(time.Duration) doWork() }
기본 구현을 제공하기 위해 데몬 인터페이스를 포함하는 추상 유형(예: AbstractDaemon)을 생성할 수 있습니다. 메소드에 대한 기본 구현을 제공합니다:
type AbstractDaemon struct { Daemon } func (a *AbstractDaemon) start(duration time.Duration) { ticker := time.NewTicker(duration) // this will call daemon.doWork() periodically go func() { for { <-ticker.C a.doWork() } }() }
구체적 유형
이제 AbstractDaemon 유형에서 상속되는 구체적인 유형을 생성하고 doWork에 대한 구현을 제공할 수 있습니다. 메소드:
type ConcreteDaemonA struct { *AbstractDaemon foo int } func (a *ConcreteDaemonA) doWork() { a.foo++ fmt.Println("A: ", a.foo) } type ConcreteDaemonB struct { *AbstractDaemon bar int } func (b *ConcreteDaemonB) doWork() { b.bar-- fmt.Println("B: ", b.bar) }
사용법
이러한 구체적인 유형을 사용하여 인스턴스를 생성하고 메소드를 호출할 수 있습니다.
var dA Daemon = newConcreteDaemonA() var dB Daemon = newConcreteDaemonB() dA.start(1 * time.Second) dB.start(5 * time.Second) time.Sleep(100 * time.Second)
이 접근 방식은 다음을 제공합니다. Go에서 추상 클래스를 구현하기 위한 메커니즘으로, 기본 메소드 구현과 임베딩을 통한 다중 상속이 가능합니다.
위 내용은 Go에서 추상 클래스를 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!