Golang 如何从socket读出所有数据
2023-09-11 14:15:05 时间
第一种:
func read(conn *net.Conn) error { defer conn.Close() buf := make([]byte, 0, 4096) len := 0 for { n, err := conn.Read(buf[len:]) if n > 0 { len += n } if err != nil { if err != io.EOF { //Error Handler } break } } // buf[:len] is the content }
第二种,更给力的一种方法:
func read2(conn *net.Conn) error { defer conn.Close() var buf bytes.Buffer _, err := io.Copy(&buf, conn) if err != nil { // Error handler return err } return nil }
从io.Copy的实现来看,它实际上跟第一种的实现非常像。它先从conn中读出最多32KB的数据,然后调用buf的Write方法将这些数据写入到buf中。
第三种:
func read3(conn *net.Conn) error { defer conn.Close() buf, err = ioutil.ReadAll(conn) if err != nil { // Error Handler return err } // use buf... return nil }
要想玩得爽,还是用第一种比较靠谱。知根知底。
相关文章
- (转)我所经历的大数据平台发展史(四):互联网时代 • 下篇
- 数据分析师经常遇到的13个问题
- smarty 第一条数据判断
- sql基础--怎样查询单列数据
- 别不相信 大数据已经侵入到你生活的方方面面
- php----处理从mysql查询返回的数据
- golang gin数据绑定综合案例:实现用户注册相关数据绑定
- golang gin ShouldBind form表单数据绑定:form:“user_name“ binding:“required,min=3“
- golang管道channel的基本使用:读、写数据到管道
- 大数据研究常用软件工具与应用场景
- Cloud for Customer的contact主数据function字段下拉菜单的绘制原理
- Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现
- SAP UI5 框架对于 OData 元数据运行时的解析逻辑
- ML之回归预测:以某个数据集为例从0到1深入理解科学预测之回归(实数值年龄预测)问题的思路框架
- ML之SVM:基于sklearn的svm算法实现对支持向量的数据进行标注
- 2021东京奥运会数据接口
- 使用bbed恢复表数据
- Intel daal数据预处理
- GoLang读写数据---下
- GoLang读写数据---中
- 【ML特征工程】第 3 章 :文本数据:扁平化、过滤和分块