go语言io和ioutil包的学习和使用
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包的学习和使用相关推荐
- go语言path包和filepath包的学习与使用
path包的使用 package main;import ("fmt""path" )//go语言path包的学习func main() {//返回路径的最后一 ...
- Python——常用Python包的学习笔记
1 致谢 感谢陈助教的帮助! 2 前言 今天想通过画图展现一下学习参考值的变化情况,在网上看了一下,需要使用plt包,不过又忘了plt是做什么用的了,于是想要记录一下,写一下关于常用Python包的笔 ...
- Java语言中的常用包、访问控制
Java常用的语言包 Java的核心类都放在Java包以及其子包下,Java扩展的许多类都放在Javax包以及其子包下.这些实用类也就是前面所说的API(应用程序接口),Oracle按这些类的功能分别 ...
- r语言导入ggplot2_R语言绘图之ggplot2包
R语言绘图之ggplot2包 (2018-09-25 03:09:30) 6月份一直在忙期末考试,今天来迅速的学习下ggplot2包的简单绘图. R的基础包里面也有很多画图函数,例如plot();ba ...
- caret包介绍学习之train函数介绍
caret包在机器学习会经常用到,它可以进行:数据预处理,特征选择,建模与参数优化,模型预测与检验.关于caret包在这些方面的应用可以参看文章: R语言之-caret包应用 R语言caret包的学习 ...
- 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 ...
- r语言 tunerf_R语言机器学习:caret包使用及其黑箱模型解释(连续变量预测)
原标题:R语言机器学习:caret包使用及其黑箱模型解释(连续变量预测) 作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界 ...
- Go语言用GoPacket抓包分析
前言 离线pcap包解析 离线数据包分析源码分析 新建packetSource 读取数据包 注意点 前言 最近有了一个抓取网络数据包来分析的需求,最近在使用go语言,于是乎,决定是用go语言来进行抓包 ...
- golang 的文件写入和读取(Write()、WriteString(),bufio包:WriteString()、flush(), ioutil 包:WriteFile()、ReadFile())
文章目录 1. os包 1.1 Write()/WriteString()方法 语法 完整示例 1.2 Read()方法 语法 完整示例 2. bufio包 2.1 WriteString()/flu ...
最新文章
- hadoop配置文件聚集功能(设置日志可以查看)
- java with关键字_[Java教程]javascript 里面 with 关键字
- 用数学方法构造神经网路的迭代次数1-9
- python中循环迭代语句_python条件与循环-循环
- Scala中的trait特质
- 【ruoyi】java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoo
- 缓存中常见的概念及解决方案
- UILabel 根据text的内容来调整大小
- 图像处理之积分图应用二(快速边缘保留滤波算法)
- Android 系统(183)---如何远端调试framework和APK?
- 七牛云存储基于时间戳防盗链算法参考实现
- poj 2182 Lost Cows 线段树!!!!
- Rose环境和用例图
- Android实现百度地图定位服务
- 新手如何在CSDN上写博客
- 【PhotoShop基础A篇】磨皮/图层/液化
- MATLAB彩色图像处理
- 2017年 Python工程师面试经历分享(七家)
- 【洛谷P2184】贪婪大陆【线段树】
- 【小工具】- Ubuntu如何查看cpu支持的指令集