内容简介:gRPC是Google出品,支持多种语言,但是国内安装会有点问题,下面整理一下,方便今后配环境的复习。结果出现了如下错误:参考
gRPC是Google出品,支持多种语言,但是国内安装会有点问题,下面整理一下,方便今后配环境的复习。
安装grpc
go get google.golang.org/grpc
结果出现了如下错误:
package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc"(https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
参考 https://blog.csdn.net/cjj198561/article/details/78133193 可以使用如下方式进行安装。
git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text go get -u github.com/golang/protobuf/{proto,protoc-gen-go} git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto cd $GOPATH/src/ go install google.golang.org/grpc
安装protocal buffer compiler
https://github.com/google/protobuf/releases
下载后使用源码安装,固定套路为:
tar -zxvf xxxx.tar.gz cd xxxx/ ./configure make make install
漫长等待后,就完事了。不过这次还没完,好像是需要将一个环境变量加到path中。
export LD_LIBRARY_PATH=/usr/local/lib
创建proto文件
helloworld.proto
放到 $GOPATH/src/helloworld
目录下,方便自己待会的引用。
syntax = "proto3"; package grpcusage; service Hello { rpc SayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string Name = 1; } message HelloReply { string Message = 1; }
然后通过protoc 根据此模板来生成对应的golang的grpc代码
#格式 protoc --go_out=plugins=grpc:{go代码输出路径} {proto文件} protoc --go_out=plugins=grpc:./ ./helloworld.proto
gRPC代码编写
server.go
package main import ( "golang.org/x/net/context" pb "helloworld" "net" "log" "google.golang.org/grpc" "fmt" ) const ( port = ":50051" ) type Server struct {} func (s *Server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{ Message: "hello " + in.Name, }, nil } func main() { conn, err := net.Listen("tcp", port) if err != nil { log.Fatal(err) } fmt.Println("grpc server listening at: 50051 port") server := grpc.NewServer() pb.RegisterHelloServer(server, &Server{}) server.Serve(conn) }
client.go
package main import ( "google.golang.org/grpc" "log" pb "helloworld" "os" "context" "fmt" ) const ( address = "localhost:50051" defaultName = "郭璞" ) func main() { conn, err := grpc.Dial(address, grpc.WithInsecure()) if err != nil { log.Fatal(err) } defer conn.Close() client := pb.NewHelloClient(conn) name := defaultName if len(os.Args) > 1 { name = os.Args[1] } request, err := client.SayHello(context.Background(), &pb.HelloRequest{Name:name}) if err != nil { log.Fatal(err) } fmt.Println(request.Message) }
测试服务
启动server端程序。
➜ grpcusage go run server.go grpc server listening at: 50051 port
启动client程序
➜ client go run client.go hello 郭璞 ➜ client
如此便实现了grpc在golang中的简单使用,暂且记录下,以备不时之需。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Runtime源码 方法调用的过程
- MySQL存储过程语句及调用
- 使用MyBatis轻松实现递归查询与存储过程调用
- Windows 10:如何解决远程过程调用错误和问题
- 个人对于super的调用过程中,一些不一样的理解
- 个人对于super的调用过程中,一些不一样的理解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
软件预构艺术(中文版)
Ken Pugh / O'Reilly Taiwan公司 / 东南大学 / 2010-6 / 26.00元
利用经验累积而得到的洞察力开发新的解决方案被称为预构。透过重构而获得的专业知识也属于这类经验,而预构的词源即重构。重构是修改程序或软件系统内部结构的实践,以此在保留其现有行为的基础上改良设计。重构的原因有多种:方便后期增加功能、提高可维护性、提升性能。 本书作者是经验老道的软件开发人员。书中,作者运用他个人和其他众多开发人员的丰富经验,展示由其推衍而得的各项实践方针。这些方针把优秀的开发人员......一起来看看 《软件预构艺术(中文版)》 这本书的介绍吧!