2017-11-21 7 views
-1

기본적으로 SetParams 메서드가있는 인터페이스를 갖고 싶습니다. 선언은 하나의 매개 변수를받는 것으로 선언하고 메서드의 반환 형식은 반환하지만 매개 변수의 반환 형식은 수신기까지 남겨 둡니다. 이 인터페이스 같은Go에 인터페이스를 구현하는 수신기에 인터페이스 매개 변수의 유형을 남길 수 있습니까?

뭔가 : XStruct 그것을 구현하는 경우

type ParamsInterface interface { 
    SetParams(<someType>) ParamsInterface 
} 

지금, 매개 변수의 유형은 XParams

type XStruct struct { 
    params XParams 
} 

func (x *XStruct) SetParams(params *XParams) ParamsInterface { 
    x.params = params 
    return x 
} 

입니다 그러나 YStruct 그것을 구현하는 경우, 매개 변수의 유형은 YParams입니다

type YStruct struct { 
    params YParams 
} 

func (y *YStruct) SetParams(params *YParams) ParamsInterface { 
    y.params = params 
    return y 
} 
+3

아니요. 불가능합니다. – Volker

답변

0

이것은 generics라고하며 빈 인터페이스 interface{} 및 유형 캐스팅 만 사용할 수 있습니다.

이동 중에 제네릭에 관한 문서는 https://docs.google.com/document/d/1vrAy9gMpMoS3uaVphB32uVXX4pi-HnNjkMEgyAHX4N4/edit#입니다.

이것은 또한 당신을 도울 수 있습니다 : 당신이 제네릭에 대한 코드 생성기를 찾을 수 있습니다 여기에

https://appliedgo.net/generics/ (에 :

How is the empty interface different than a generic?

Why no generics in Go?

이 문서에서는 제네릭없이 살 수있는 몇 가지 방법을 제안합니다 내 생각에 그게 최선의 생각이 아니란 정직한 의견) https://github.com/cheekybits/genny.

+0

빈 인터페이스를 사용하면'YParams'와'XParams'에서 자동 완성 제안을하지 않겠습니까? –

+0

@AyushGupta 대답을 업데이트하고 마지막 두 개의 링크를 확인하십시오. –

+0

흠 .. 제네릭없이 작성하면 스텁이 XParams에 대한 특별한 방법을 가지고 있습니다 –

관련 문제