Golang是一種開源的編程語言,它被廣泛用于構(gòu)建高效、可靠和可擴(kuò)展的Web應(yīng)用程序。而gRPC是一種高性能、跨語言的RPC框架,支持多種語言,Golang是其中之一。在Golang中使用gRPC返回Json格式的數(shù)據(jù)是一種非常常見的做法,本文將介紹如何使用gRPC將返回的數(shù)據(jù)轉(zhuǎn)換為Json格式。
// 定義gRPC服務(wù)的proto文件 syntax = "proto3"; package demo; service DemoService { rpc GetDemoInfo (DemoInfoRequest) returns (DemoInfoResponse) {} } message DemoInfoRequest { int32 id = 1; } message DemoInfoResponse { int32 id = 1; string name = 2; } // 在Golang中使用gRPC ```go package main import ( "context" "encoding/json" "net" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" pb "your/proto/directory/path/demo" // 引入生成的pb文件 ) type demoService struct{} func (s *demoService) GetDemoInfo(ctx context.Context, req *pb.DemoInfoRequest) (*pb.DemoInfoResponse, error) { demoInfo := &pb.DemoInfoResponse{ Id: req.Id, Name: "DemoName", } // 將gRPC返回的數(shù)據(jù)轉(zhuǎn)換為Json格式 data, err := json.Marshal(demoInfo) if err != nil { return nil, err } rsp := &pb.DemoInfoResponse{} err = json.Unmarshal(data, rsp) if err != nil { return nil, err } return rsp, nil } func main() { lis, err := net.Listen("tcp", ":8094") if err != nil { panic(err) } s := grpc.NewServer( grpc.KeepaliveParams(keepalive.ServerParameters{ MaxConnectionIdle: time.Second * 20, MaxConnectionAgeGrace: time.Second * 5, Time: time.Second * 2, Timeout: time.Second * 1, }), grpc.MaxRecvMsgSize(10*1024*1024), // 最大接收的消息大小 grpc.MaxSendMsgSize(10*1024*1024), // 最大發(fā)送的消息大小 grpc.UnaryInterceptor(NewLogInterceptor(…)), ) pb.RegisterDemoServiceServer(s, &demoService{}) err = s.Serve(lis) if err != nil { panic(err) } } func NewLogInterceptor() grpc.UnaryServerInterceptor { return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { // 記錄請(qǐng)求日志 return handler(ctx, req) } } ```
上一篇html左滑輪播圖代碼
下一篇python 軟件編程貓