>백엔드 개발 >Golang >Go에서 익명 인터페이스 구현이 가능합니까?

Go에서 익명 인터페이스 구현이 가능합니까?

DDD
DDD원래의
2024-11-26 18:35:13191검색

Can Anonymous Interface Implementations Be Achieved in Go?

Go의 익명 인터페이스 구현

소개

Go에서는 인터페이스를 사용하여 사용자 정의 유형을 정의할 수 있습니다. 그러나 특정 기능을 간단한 작업으로 구현해야 하는 상황에서 인터페이스의 익명 구현이 가능한지에 대한 의문이 제기됩니다.

함수를 사용한 익명 구현

의사 코드 제공된 제안에서는 다음과 유사한 익명 구현을 만들 것을 제안합니다.

RandomNumOp({
   Binary: func(a, b int) int { return a + b },
   Ternary: func(a, b, c int) int { return a + b + c },
})

제한 사항

그러나 이 접근 방식은 메소드 선언은 파일 수준에서 정의되어야 하기 때문에 Go에서는 직접적으로 가능하지 않습니다. 따라서 여러 메서드가 있는 인터페이스를 구현하려면 명시적인 메서드 선언이 필요합니다.

실행 가능한 구현

실행 가능한 구현을 얻으려면 기존 구조체를 활용하거나 "더미" 구현을 생성하여 다음을 수행할 수 있습니다. 결과가 없음을 강조한다. 예는 다음과 같습니다.

type DummyOp struct{}

func (DummyOp) Binary(_, _ int) int     { return 0 }
func (DummyOp) Ternary(_, _, _ int) int { return 0 }

또는 메소드에 대한 기능을 동적으로 제공할 수 있는 위임자 구조체 유형을 고려하세요.

type CustomOp struct {
    binary  func(int, int) int
    ternary func(int, int, int) int
}

func (cop CustomOp) Binary(a, b int) int {
    if cop.binary != nil {
        return cop.binary(a, b)
    }
    return 0
}

func (cop CustomOp) Ternary(a, b, c int) int {
    if cop.ternary != nil {
        return cop.ternary(a, b, c)
    }
    return 0
}

사용 예:

RandomNumOp(CustomOp{
    binary: func(a, b int) int { return a + b },
})

비기능적 구현

구현에 기능이 필요하지 않은 경우 메서드에서는 익명 구조체 리터럴을 사용할 수 있습니다.

var op NumOp = struct{ NumOp }{}

위 내용은 Go에서 익명 인터페이스 구현이 가능합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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