快速入门

本指南通过一个简单的示例帮助您开始使用 Go 中的 gRPC。

快速入门

本指南通过一个简单的示例帮助您开始使用 Go 中的 gRPC。

先决条件

  • Go,任何一个最新的两个主要版本Go

    有关安装说明,请参阅 Go 的 入门 指南。

  • Protocol buffer 编译器protoc版本 3

    有关安装说明,请参阅 Protocol Buffer 编译器安装

  • 用于协议编译器的 Go 插件

    1. 使用以下命令安装 Go 的协议编译器插件

      go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
      go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
      
    2. 更新您的 PATH,以便 protoc 编译器可以找到插件

      export PATH="$PATH:$(go env GOPATH)/bin"
      

获取示例代码

示例代码是 grpc-go 存储库的一部分。

  1. 将存储库下载为 zip 文件 并解压,或克隆存储库

    git clone -b v1.69.2 --depth 1 https://github.com/grpc/grpc-go
    
  2. 切换到快速入门示例目录

    cd grpc-go/examples/helloworld
    

运行示例

examples/helloworld 目录

  1. 编译并执行服务器代码

    go run greeter_server/main.go
    
  2. 从不同的终端,编译并执行客户端代码以查看客户端输出

    go run greeter_client/main.go
    Greeting: Hello world
    

恭喜!您刚刚使用 gRPC 运行了一个客户端-服务器应用程序。

更新 gRPC 服务

在本节中,您将使用额外的服务器方法更新应用程序。 gRPC 服务使用 协议缓冲区 定义。要了解有关如何在 .proto 文件中定义服务的更多信息,请参阅 基础教程。现在,您只需要知道服务器和客户端存根都有一个 SayHello() RPC 方法,该方法从客户端获取 HelloRequest 参数,并从服务器返回 HelloReply,并且该方法定义如下

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

打开 helloworld/helloworld.proto 并添加一个新的 SayHelloAgain() 方法,具有相同的请求和响应类型

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Sends another greeting
  rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

记得保存文件!

重新生成 gRPC 代码

在您可以使用新的服务方法之前,您需要重新编译更新的 .proto 文件。

仍然在 examples/helloworld 目录中,运行以下命令

protoc --go_out=. --go_opt=paths=source_relative \
    --go-grpc_out=. --go-grpc_opt=paths=source_relative \
    helloworld/helloworld.proto

这将重新生成 helloworld/helloworld.pb.gohelloworld/helloworld_grpc.pb.go 文件,其中包含

  • 用于填充、序列化和检索 HelloRequestHelloReply 消息类型的代码。
  • 生成的客户端和服务器代码。

更新并运行应用程序

您已经重新生成了服务器和客户端代码,但您仍然需要在示例应用程序的人工编写部分中实现并调用新方法。

更新服务器

打开 greeter_server/main.go 并向其中添加以下函数

func (s *server) SayHelloAgain(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
        return &pb.HelloReply{Message: "Hello again " + in.GetName()}, nil
}

更新客户端

打开 greeter_client/main.go 以将以下代码添加到 main() 函数体的末尾

r, err = c.SayHelloAgain(ctx, &pb.HelloRequest{Name: *name})
if err != nil {
        log.Fatalf("could not greet: %v", err)
}
log.Printf("Greeting: %s", r.GetMessage())

记得保存您的更改。

运行!

像之前一样运行客户端和服务器。从 examples/helloworld 目录执行以下命令

  1. 运行服务器

    go run greeter_server/main.go
    
  2. 从另一个终端,运行客户端。这次,添加一个名称作为命令行参数

    go run greeter_client/main.go --name=Alice
    

    您将看到以下输出

    Greeting: Hello Alice
    Greeting: Hello again Alice
    

下一步是什么

上次修改时间:2024 年 11 月 25 日:feat: move the $ shell line indicator to scss (#1354) (ab8b3af)