질문:
Go에는 구조체가 하나 있습니다. 인터페이스를 구현하는 패키지입니다. 다른 종속 패키지에서는 테스트 목적으로 이 구조체의 가짜 구현을 만들고 싶습니다. 그러나 인터페이스를 구현하는 구조체를 반환하는 함수를 해당 인터페이스의 변수에 할당하려고 하면 Go에서 유형 안전성에 대해 불평합니다.
Architecture:
// Package expensive type myStruct struct{} func (m *myStruct) DoSomething() {...} func (m *myStruct) DoSomethingElse() {...} func CreateInstance() *myStruct {...} // Expensive to call // Package main type myInterface interface { DoSomething() } type structToConstruct struct { factoryFunction func() myInterface } func (s *structToConstruct) performAction() {...}
오류:
"비싼.CreateInstance를 사용할 수 없습니다(func() 유형 *expensive.myStruct) 필드 값의 func() myInterface 유형"
답변:
CreateInstance 함수가 *myStruct 값을 반환하기 때문에 문제가 발생합니다. FactoryFunction에 필요한 func() myInterface 유형에서. 이 문제를 해결하려면:
// Package main type myInterface interface { DoSomething() } type myStruct struct{} func (m *myStruct) DoSomething() {...} func getInstance() myInterface { return &myStruct{} }
이 수정을 통해 이제 getInstance는 myInterface 유형을 반환하여 이를 FactoryFunction에 할당할 수 있습니다.
추가 참고 사항:
wrapper := func() myInterface { return expensive.CreateInstance() }
위 내용은 Go에서 인터페이스를 구현하는 구조체를 반환하는 함수를 할당하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!