欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

golang grpc 返回json

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)
}
} 
```