io包

package main;import ("errors""fmt""io"
)//io包中定义了非常多的interface
//只要实现了接口中的方法
//那么io包中的导出方法就可以传入我们自定义的对象然后进行处理
//像什么文件数据,网络数据,数据库数据都可以统一操作接口type MyReWr struct {//保存的数据data string;//指向当前数据读取的位置下标rix int;//指向当前数据写入的位置下标wix int;
}func MyReWrNew(s string) *MyReWr {return &MyReWr{s, 0, 0};
}//读取数据到p中
func (m *MyReWr) Read(p []byte) (n int, err error) {l := len(p);num := 0;if m.rix >= len(m.data) {return 0, errors.New("EOF");}tmp := []byte(m.data);//判断当前数据读取的下标if (m.rix + l) < len(m.data) {num = l;} else {num = len(m.data) - m.rix;}//循环给p设置数据for ix := 0; ix < num; ix++ {p[ix] = tmp[m.rix+ix];}//增加读取下标m.rix = m.rix + num;return num, nil;
}//将p中数据写入
func (m *MyReWr) Write(p []byte) (n int, err error) {l := len(p);num := 0;if m.wix >= len(m.data) {return 0, errors.New("EOF");}tmp := []byte(m.data);//判断当前数据写入的下标if (m.wix + l) < len(m.data) {num = l;} else {num = len(m.data) - m.wix;}//循环写入数据for ix := 0; ix < num; ix++ {tmp[m.wix+ix] = p[ix];}m.data = string(tmp);//增加写入下标m.wix = m.wix + num;return num, nil;
}func main() {//我们自定义的一个结构,实现了Read和Write方法m := MyReWrNew("12345678910");p := make([]byte, 3);//循环读取数据for {n, _ := m.Read(p);if n == 0 {break;}fmt.Println(n, string(p[0:n]));}//循环写入数据for {n, _ := m.Write([]byte("111"));if n == 0 {break;}fmt.Println(n, m.data);}//MyReWr结构就可以使用如下方法m2 := MyReWrNew("666666666");m3 := MyReWrNew("999999999");tee := io.TeeReader(m2, m3);for {//循环从m2中读取数据到p中,再写入到m3中。n, _ := tee.Read(p);if n == 0 {break;}fmt.Println(m2, m3);}//向m4中拷贝m5中的数据m4 := MyReWrNew("aaaaaaaaa");m5 := MyReWrNew("mmmmmmm");io.Copy(m4, m5);fmt.Println(m4, m5);//从m6中读取数据放入p2中m6 := MyReWrNew("abcdefghijklmo");p2 := make([]byte, len(m6.data));io.ReadFull(m6, p2);fmt.Println(string(p2));//向m7中写入字符串,如果实现了WriteString方法会直接调用。m7 := MyReWrNew("hello");io.WriteString(m7, "world123");fmt.Println(m7);
}

ioutil包

package main;import ("strings""io/ioutil""fmt"
)func main() {//NopCloser返回一个读取对象的ReadCloser接口//用于提供Close方法r := strings.NewReader("hello");rcl := ioutil.NopCloser(r);defer rcl.Close();//ReadAll读取所有数据r2 := strings.NewReader("1234567890");p, _ := ioutil.ReadAll(r2);fmt.Println(string(p));//读取目录下信息fileInfo, _ := ioutil.ReadDir("./");for _, v := range fileInfo {fmt.Println(v.Name());}//读取整个文件数据data, _ := ioutil.ReadFile("./1.txt");fmt.Println(string(data));//向指定文件写入数据,如果文件不存在,则创建文件,写入数据之前清空文件ioutil.WriteFile("./xxx.txt", []byte("hello,world"), 0655);//在当前目录下,创建一个以test为前缀的临时文件夹,并返回文件夹路径name, _ := ioutil.TempDir("./", "test");fmt.Println(name);//在当前目录下,创建一个以test为前缀的文件,并以读写模式打开文件,并返回os.File指针file, _ := ioutil.TempFile("./", "test");file.WriteString("写入字符串");file.Close();
}

  

转载于:https://www.cnblogs.com/jkko123/p/6952237.html

go语言io和ioutil包的学习和使用相关推荐

  1. go语言path包和filepath包的学习与使用

    path包的使用 package main;import ("fmt""path" )//go语言path包的学习func main() {//返回路径的最后一 ...

  2. Python——常用Python包的学习笔记

    1 致谢 感谢陈助教的帮助! 2 前言 今天想通过画图展现一下学习参考值的变化情况,在网上看了一下,需要使用plt包,不过又忘了plt是做什么用的了,于是想要记录一下,写一下关于常用Python包的笔 ...

  3. Java语言中的常用包、访问控制

    Java常用的语言包 Java的核心类都放在Java包以及其子包下,Java扩展的许多类都放在Javax包以及其子包下.这些实用类也就是前面所说的API(应用程序接口),Oracle按这些类的功能分别 ...

  4. r语言导入ggplot2_R语言绘图之ggplot2包

    R语言绘图之ggplot2包 (2018-09-25 03:09:30) 6月份一直在忙期末考试,今天来迅速的学习下ggplot2包的简单绘图. R的基础包里面也有很多画图函数,例如plot();ba ...

  5. caret包介绍学习之train函数介绍

    caret包在机器学习会经常用到,它可以进行:数据预处理,特征选择,建模与参数优化,模型预测与检验.关于caret包在这些方面的应用可以参看文章: R语言之-caret包应用 R语言caret包的学习 ...

  6. Linux IO操作——RIO包

    1.linux基本I/O接口介绍 ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, void *buf, siz ...

  7. r语言 tunerf_R语言机器学习:caret包使用及其黑箱模型解释(连续变量预测)

    原标题:R语言机器学习:caret包使用及其黑箱模型解释(连续变量预测) 作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界 ...

  8. Go语言用GoPacket抓包分析

    前言 离线pcap包解析 离线数据包分析源码分析 新建packetSource 读取数据包 注意点 前言 最近有了一个抓取网络数据包来分析的需求,最近在使用go语言,于是乎,决定是用go语言来进行抓包 ...

  9. golang 的文件写入和读取(Write()、WriteString(),bufio包:WriteString()、flush(), ioutil 包:WriteFile()、ReadFile())

    文章目录 1. os包 1.1 Write()/WriteString()方法 语法 完整示例 1.2 Read()方法 语法 完整示例 2. bufio包 2.1 WriteString()/flu ...

最新文章

  1. hadoop配置文件聚集功能(设置日志可以查看)
  2. java with关键字_[Java教程]javascript 里面 with 关键字
  3. 用数学方法构造神经网路的迭代次数1-9
  4. python中循环迭代语句_python条件与循环-循环
  5. Scala中的trait特质
  6. 【ruoyi】java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoo
  7. 缓存中常见的概念及解决方案
  8. UILabel 根据text的内容来调整大小
  9. 图像处理之积分图应用二(快速边缘保留滤波算法)
  10. Android 系统(183)---如何远端调试framework和APK?
  11. 七牛云存储基于时间戳防盗链算法参考实现
  12. poj 2182 Lost Cows 线段树!!!!
  13. Rose环境和用例图
  14. Android实现百度地图定位服务
  15. 新手如何在CSDN上写博客
  16. 【PhotoShop基础A篇】磨皮/图层/液化
  17. MATLAB彩色图像处理
  18. 2017年 Python工程师面试经历分享(七家)
  19. 【洛谷P2184】贪婪大陆【线段树】
  20. 【小工具】- Ubuntu如何查看cpu支持的指令集

热门文章

  1. Android PullToRefreshListView和ViewPager的结合使用
  2. 未来农业科技:物联网如何阻止全球粮荒
  3. Oracle——20数据库恢复与备份
  4. Delphi、C#之父Anders Hejlsberg首次访华 推广TypeScript
  5. 常用eclipse插件集合, 持续更新
  6. 搜索引擎优化(独立阐述)
  7. 计算机模型与体系架构的发展——从图灵机到云计算机1
  8. 怎样正确处理WinForm中Listview的ItemCheck事件
  9. IPv6 — 移动性支持
  10. C 语言编程 — 输入/输出与文件操作