>백엔드 개발 >Golang >gRPC의 `mustEmbedUnimplemented`는 어떻게 서버 향후 호환성을 향상합니까?

gRPC의 `mustEmbedUnimplemented`는 어떻게 서버 향후 호환성을 향상합니까?

DDD
DDD원래의
2024-11-30 11:34:11120검색

How Does gRPC's `mustEmbedUnimplemented` Enhance Server Forward Compatibility?

mustEmbedUnimplemented를 사용한 gRPC의 상위 호환성*

gRPC-go 라이브러리는 서버에서 상위 호환성을 향상시키기 위해 mustEmbedUnimplemented*** 메서드를 도입했습니다.

과거에는 gRPC 서버가 필요한 메서드가 구현되지 않으면 컴파일이 실패합니다. 이를 완화하기 위해 개발자는 사용하려는 의도가 아니더라도 구현되지 않은 메서드를 수동으로 구현해야 했습니다.

mustEmbedUnimplemented*는 상위 호환성을 거부하여 이 문제를 해결합니다. 이는 다음을 의미합니다.

  • 이제 서버는 상위 호환성을 선택 해제하려면 구현되지 않은*** 인터페이스를 명시적으로 포함해야 합니다.
  • 구현되지 않은***를 포함하면 서버는 컴파일 시간을 수신하지 않습니다. 메소드 구현 누락에 대한 오류가 발생하지만 구현되지 않은 메소드가 호출되면 런타임에 실패합니다.

예를 들어 GreetService 인터페이스가 있는 경우:

type GreetService interface {
    Greet(ctx context.Context, req *pb.GreetRequest, opts ...gax.CallOption) (*pb.GreetResponse, error)
}

이전에는 다음과 같이 구현했습니다.

type server struct {...}
func (s *server) Greet(ctx context.Context, req *pb.GreetRequest, opts ...gax.CallOption) (*pb.GreetResponse, error) {...}
func (s *server) MustEmbeddUnimplementedGreetServiceServer() {...}

이제 mustEmbedUnimplemented***를 사용하면 다음과 같은 방법으로 상위 호환성을 옵트아웃할 수 있습니다. 대신 안전하지 않은*** 인터페이스를 삽입합니다.

type server struct {
    grpc.UnsafeGreetServiceServer
    ...
}

이 변경 사항은 유연성을 높이고 불필요한 코드를 방지합니다. 귀하의 서버 구현.

위 내용은 gRPC의 `mustEmbedUnimplemented`는 어떻게 서버 향후 호환성을 향상합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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