亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

grpc 測試代碼退出 1 并出現“rpc 錯誤:代碼 = 未實現的 desc

grpc 測試代碼退出 1 并出現“rpc 錯誤:代碼 = 未實現的 desc

Go
元芳怎么了 2022-10-17 19:20:26
環境go version go1.17.4 linux/amd64libprotoc 3.6.1問題我正在測試 Go 實現的 grpc 服務器和客戶端。首先,我做了 proto 定義并通過 protoc 命令生成 pb 代碼。我提到了這個解決方案。下面的錯誤由最小代碼打印以重現我的錯誤。錯誤$ go test--- FAIL: TestHello (0.00s)    main_test.go:49: failed to Hello: rpc error: code = Unimplemented desc = method Hello not implementedFAILexit status 1FAIL    github.com/Asuha-a/test/test    0.003s代碼你好.protosyntax = "proto3";option go_package = "github.com/Asuha-a/test/pb";package hello;service Hello {  rpc Hello (HelloRequest) returns (HelloReply) {}}message HelloRequest {  string foo = 1;}message HelloReply {  string bar = 1;}main_test.gopackage hello_testimport (    "context"    "log"    "net"    "testing"    "github.com/Asuha-a/test/pb"    "google.golang.org/grpc"    "google.golang.org/grpc/test/bufconn")type server struct {    pb.UnimplementedHelloServer}const bufSize = 1024 * 1024var lis *bufconn.Listenerfunc init() {    lis = bufconn.Listen(bufSize)    s := grpc.NewServer()    pb.RegisterHelloServer(s, &server{})    go func() {        if err := s.Serve(lis); err != nil {            log.Fatalf("server exited with error: %v", err)        }    }()}func bufDialer(context.Context, string) (net.Conn, error) {    return lis.Dial()}func TestHello(t *testing.T) {    ctx := context.Background()    conn, err := grpc.DialContext(ctx, "bufnet", grpc.WithContextDialer(bufDialer), grpc.WithInsecure())    if err != nil {        t.Fatalf("failed to dial bufnet: %v", err)    }    defer conn.Close()    client := pb.NewHelloClient(conn)    r, err := client.Hello(ctx, &pb.HelloRequest{        Foo: "foo",    })    if err != nil {        t.Fatalf("failed to Hello: %v", err) //49th line prints the error    }    log.Println(r)}
查看完整描述

1 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

在您的測試中,您pb.RegisterHelloServer(s, &server{})使用 serverstruct 進行調用。然而,這個結構只嵌入pb.UnimplementedHelloServer和聲明沒有方法。因此,您只能codes.Unimplemented在調用其任何 RPC 時返回。


您必須在結構上實現Hellorpc server:


func (s *server) Hello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {

    return &pb.HelloReply{}, nil

}

注意:嵌入pb.UnimplementedHelloServer使 gRPC 服務器實現向前兼容,但代價是編譯時檢查。要放棄前向兼容性并在編譯時捕獲這些錯誤,您可以改為嵌入pb.UnsafeHelloServer.


查看完整回答
反對 回復 2022-10-17
  • 1 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號