关于流模式方法返回值的问题

关于流模式方法返回值的问题

请问下老师,这里server GetStream方法的返回值error到底拿来干嘛的?https://img1.sycdn.imooc.com//climg/63f51e96090d8e6224720935.jpg

如果res.send()方法返回值有错误,把err  return 出去,到底在哪儿处理?还是不需要处理?

以后写这种流代码,都直接return nil ?  我测试了下,如果不加for循环阻塞,貌似就直接给客户端返回EOF了,他的作用就是这个吗?


 还有个问题,在服务端这个方法for循环阻塞住了,客户端调用getStream() 还能立即拿到client和err返回值,做循环操作,这里为啥不阻塞呢?

https://img1.sycdn.imooc.com//climg/63f51fdf094ba32c22300682.jpg

对于之前只写过unary这种同步接口的有点难理解,



最后,在AllStream代码那儿,老师用了waitgroup去控制两个goroutine,最后使用wait()阻塞住,也是想办法不让该方法退出,我按我的理解,不应该是 写两个go协程后台运行,然后AllStream方法返回,服务端和go协程也不会挂,有点疑惑。


这里GetStream方法 server端只返回error ,而客户端得到的是包含client和error的两个返回值了,都不一样了。

正在回答

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

1回答

服务端和客户端要确保直接的本地goroutine不能退出,所以1. 上面的error返回后就会代表这次的连接断开了 2. for循环的目的是确保每次服务端send的数据都能通过recv接收到, 3. allstream使用wait的目的是为了防止主goroutine退出,因为一旦退出了链接就断开了

  • 爱吃apple的阿狸 提问者 #1

    那服务端GetStream()方法的error返回值无论是 nil 或者是 error 都没关系吗?只要给返回一个nil,就退出了,所以这个返回值无关紧要对吧?

    2023-02-22 22:06:20
  • bobby 回复 提问者 爱吃apple的阿狸 #2

    是的,你可以试一下

    2023-02-23 13:35:11
  • 老师这个视频居然是2020-08-25 00:32:55 录的。。。。。

    2023-06-06 01:08:43
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
Go开发工程师全新版
  • 参与学习       489    人
  • 解答问题       559    个

风口上的技术,薪资水平遥遥领先,现在学习正值红利期! 未来3-5年,Go语言势必成为企业高性能项目中不可替代的语言 从基础到项目实战再到重构,对转行人员友好,真正从入门到精通!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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