1創建proto文件 並 編譯
protoc --go_out=plugins=grpc:. hello.proto
syntax = "proto3";
option objc_class_prefix = "HLW";
package go.srv.hello;
service helloService {
rpc Hello(Msg) returns (Response) {}
}
message Msg {
string msg = 1;
}
message Response {
string msg = 1;
}
2編寫server代碼
package hello
import (
"context"
"fmt"
pb "zl-go/DemoDir/internal/proto/hello"
)
type Server struct {}
func (s *Server) Hello(ctx context.Context, in *pb.Msg) (*pb.Response, error) {
fmt.Println("request: ", in.Msg)
return &pb.Response{Msg: "Hello " + in.Msg}, nil
}
3編寫運行代碼
package init
import (
"fmt"
"google.golang.org/grpc"
"net"
"zl-go/DemoDir/internal/server/grpc/hello"
pb "zl-go/DemoDir/internal/proto/hello"
)
func init() {
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 50001))
if err != nil {
fmt.Println("failed to listen: %v", err)
}
grpcServer := grpc.NewServer()
pb.RegisterHelloServiceServer(grpcServer, &hello.Server{})
grpcServer.Serve(lis)
}
4編寫客戶端代碼
package main
import (
"log"
"os"
pb "zl-go/DemoDir/internal/proto/hello"
"golang.org/x/net/context"
"google.golang.org/grpc"
)
const (
address = "localhost:50001"
)
func main() {
conn, err := grpc.Dial(address, grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
c := pb.NewHelloServiceClient(conn)
name := "lin"
if len(os.Args) > 1 {
name = os.Args[1]
}
r, err := c.Hello(context.Background(), &pb.Msg{Msg: name})
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Println(r.Msg)
}
demo地址:(//download.csdn.net/download/qq_35513598/11964608)
demo初始化:
編譯proto文件--腳本在scripts目錄下
cd %GOPATH%/src/zl-go/DemoDir/internal/proto/hello
protoc --go_out=plugins=grpc:. hello.proto
服務端代碼在 init/initGrop.go 中
運行cmd/myapp/main.go(服務端)
運行examples/demoHelloCli.go(客戶端)