修复grpc 返回字段为该字段类型的默认值时,不传该字段问题

编程入门 行业动态 更新时间:2024-10-10 14:24:36

修复grpc 返回<a href=https://www.elefans.com/category/jswz/34/1771443.html style=字段为该字段类型的默认值时,不传该字段问题"/>

修复grpc 返回字段为该字段类型的默认值时,不传该字段问题

在使用go 的grpc通信时,会有一个坑,当grpc 返回字段为该字段类型的默认值时,为了节省带宽,不会传输该字段,这对客户端来说,数据结构不严谨,解决办法

grpc :

import (pb "github/golang/protobuf/jsonpb"
)func marshalJsonp(pbMsg proto.Message) (msg []byte, err error) {m := pb.Marshaler{EmitDefaults: true, OrigName: true}var data bytes.Buffererr = m.Marshal(&data, pbMsg)return data.Bytes(), err
}

 

grpc-gateway

 

package mainimport ("flag""net/http""github/golang/glog""golang/x/net/context""github/grpc-ecosystem/grpc-gateway/runtime""google.golang/grpc"gw "path/to/your_service_package"
)var (echoEndpoint = flag.String("echo_endpoint", "localhost:9090", "endpoint of YourService")
)func run() error {ctx := context.Background()ctx, cancel := context.WithCancel(ctx)defer cancel()mux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true})opts := []grpc.DialOption{grpc.WithInsecure()}err := gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux, *echoEndpoint, opts)if err != nil {return err}return http.ListenAndServe(":8080", mux)
}func main() {flag.Parse()defer glog.Flush()if err := run(); err != nil {glog.Fatal(err)}
}

起作用的就是下面这句配置:

 mux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true})

 

更多推荐

修复grpc 返回字段为该字段类型的默认值时,不传该字段问题

本文发布于:2024-02-08 20:56:15,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674946.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字段   为该   默认值   不传   类型

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!