grpc服务返回struct中的空slice(不为nil),在调用端还是变成了nil

grpc服务返回struct中的空slice(不为nil),在调用端还是变成了nil

老师:
    
    https://img1.sycdn.imooc.com//climg/63b1ad1209d5dee810940306.jpg
    在grpc服务端我给resp.Data初始化了,即使resp.Data是空的,json.Marshal后resp.Data也是[],而不是null
    
    但是在web服务端调用grpc时,对返回值json.Marshal,Data为空时还是变成了null

    这个有好的方案可以处理么(如果不在web服务端加data长度判断的话

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
bobby 2023-01-03 17:45:27

 在grpc服务端我给resp.Data初始化了,即使resp.Data是空的,json.Marshal后resp.Data也是[],而不是null
    
    但是在web服务端调用grpc时,对返回值json.Marshal,Data为空时还是变成了null


这两句话看起来是两种情况一个是null一个是[]? 我不太明白,你能把这两个地方的代码截图我看看吗? 以及截图我看看调试变量的值是什么?

  • 提问者 慕粉3722061 #1

    https://img1.sycdn.imooc.com//climg/63b42f0809db88b924441186.jpg
    Test.EmptySlice值是空的slice,Test.NilSlice值是nil,json.Marshal后一个是[],一个是null

    在grpc端return这个test,在调用端EmptySlice依然变成了nil值

    2023-01-03 21:49:42
  • 提问者 慕粉3722061 #2

    grpc服务端
    https://img1.sycdn.imooc.com//climg/63b43847090bef1825721552.jpg
    grpc调用端
    https://img1.sycdn.imooc.com//climg/63b4388a093373bd24541596.jpg

    2023-01-03 22:15:50
  • bobby 回复 提问者 慕粉3722061 #3

    这俩打印是有区别的,服务端是用json进行编码后的结果。后面的客户端是经过protobuffer编码的,所以两者有区别也是正常的,你如果为了判断可以使用len(xx) >0 来判断

    2023-01-04 10:59:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师