golang——写文件和读文件
之前聊过,操作文件——读写文件,直接调用接口即可. 如果是一直写入操作,写入操作一直进行的,免不了会有,有时一大批数据过来,有时没有一条数据。
鉴于此场景,选择用select....channel 的模型处理。 代码如下:
package main import (
"fmt"
"time"
"os"
"strconv"
"strings"
) func main() { fd , _ := os.OpenFile("a.txt",os.O_RDWR|os.O_CREATE|os.O_APPEND,)
var a chan string
a =make(chan string)
go sendDataTo(a) getAchan(*time.Second,a, fd)
fd.Close()
} func sendDataTo(a chan string) {
// for {
// a <- "我是a通道的数据"
// time.Sleep(1e9 *3)
// }
for i:=; i<; i++{
time.Sleep(1e9 *)
a <- strconv.Itoa(i)
}
} //在一定时间内接收不到a的数据则超时
func getAchan(timeout time.Duration, a chan string, fd *os.File) { var after <-chan time.Time
loop: var BuffItems []string
after = time.After(timeout) for{
fmt.Println("等待a中的数据,10秒后没有数据则再重新接收")
select {
case x :=<- a:
BuffItems = append(BuffItems,x)
if len(BuffItems) < {continue
}else{
dd := strings.Join(BuffItems, ",")
fmt.Println("....@@@@......",dd)
content := "写入的文件内容" + dd
fd.WriteString(content)
fd.WriteString("\n")
} goto loop
case <-after:
fmt.Println("timeout.") dd := strings.Join(BuffItems, ",")
fmt.Println("....@@@@...timeout1111...",dd) if len(dd) <{
goto loop
}else{
content := "写入的文件内容timeout" + dd
fd.WriteString(content)
fd.WriteString("\n")
}
goto loop
// return }
}
}
可根据 超时时间和接收数据的数量,两个维度处理。没有数据在channel接收到的时候,则等待。
下面这种是传统的对文件操作的方式,并统计写文件的时间。
package main import (
"fmt"
"time"
"reflect"
"os"
"strconv"
"strings"
) //耗时统计函数
func timeCost() func() {
start := time.Now()
return func() {
tc := time.Since(start)
fmt.Printf("time cost = %v\n", tc)
}
} func sum(n int, fd *os.File) { defer timeCost()() //注意,是对 timeCost()返回的函数进行调用,因此需要加两对小括号 for i:=; i <= n; i++ {
stri := strconv.Itoa(i)
content := "写入的文件内容" + stri
fd.WriteString(content)
fd.WriteString("\n")
}
} func main() { fd , _ := os.OpenFile("a1.txt",os.O_RDWR|os.O_CREATE|os.O_APPEND,)
sum(,fd)
time.Sleep(* time.Second)
fd.Close()
}
golang——写文件和读文件的更多相关文章
- 根据python上下文管理,写一个在读文件内容前后自动打开关闭文件的程序
利用上下文管理实现读f文件前后自动打开关闭文件#在本目录创建f文件,内容写monkey代码如下 import contextlib #导入模块1 @contextlib.contextmanager# ...
- golang bufio、ioutil读文件的速度比较(性能测试)和影响因素分析
前言 golang读取文件的方式主要有4种: 使用File自带的Read方法 使用bufio库的Read方法 使用io/ioutil库的ReadAll() 使用io/ioutil库的ReadFile( ...
- Json文件转换为Excel文件!涉及读文件,时间戳转化,写文档
一. 思路 今天接到个小任务,让把json文件转换成excel文件,按照列展开. 思路:既然json已经都已经是现成的,那直接将json文件做读操作,在通过不同的key,找到对应的信息,在存到单元格中 ...
- GoLang几种读文件方式的比较
GoLang提供了很多读文件的方式,一般来说常用的有三种.使用Read加上buffer,使用bufio库和ioutil 库. 那他们的效率如何呢?用一个简单的程序来评测一下: package main ...
- C++写和读文件
1.写: /*C++写文件和读文件*/ #include <stdio.h> #include <stdlib.h> int main() { FILE * fp; fp = ...
- Python学习入门基础教程(learning Python)--5.2 Python读文件基础
上节简单的说明了一下Pyhon下的文件读写基本流程,从本节开始,我们做几个小例子来具体展示一下Python下的文件操作,本节主要是详细讲述Python的文件读操作. 下面举一个例子,例子的功能是读取当 ...
- C# IO操作(四)大文件拷贝(文件流的使用)、文件编码
大文件拷贝(文件流的使用).文件编码 首先说一下大文件拷贝和文件流,因为计算机的内存资源是有限的,面对几个G甚至更大的文件,需要通过程序来完成拷贝,就需要用到文件流(因为我们无法做到把文件一 ...
- 在Linux中要修改一个文件夹或文件的权限
在Linux中要修改一个文件夹或文件的权限我们需要用到linux chmod命令来做,下面我写了几个简单的实例大家可参考一下. 语法如下: chmod [who] [+ | - | =] [mode] ...
- java 安卓开发之文件的读与写
java文件的读与写,代码: String file="user.txt"; private void writeFileData(String str1, String str2 ...
随机推荐
- StoneTab标签页CAD插件 3.2.0
//////////////////////////////////////////////////////////////////////////////////////////////////// ...
- JS基础_对象的方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- [NOIP10.6模拟赛]1.merchant题解--思维+二分
题目链接: while(1)gugu(while(1)) 闲扯 考场上怕T2正解写挂其他两题没管只打了暴力,晚上发现这题思维挺妙的 同时想吐槽出题人似乎热衷卡常...我的巨大常数现在显露无疑QAQ 分 ...
- luogu4677山区建小学题解--区间DP
题目链接 https://www.luogu.org/problemnew/show/P4677 分析 这道题方法跟之前题不一样,我们相当于枚举一个左右端点来线性扩展,同时划分断点进行决策 \(f[i ...
- Django数据查询中对字段进行排序
Django数据查询中对字段进行排序 第一种方法:使用order_by进行排序 Articlelist = Article.objects.filter(**kwargs).order_by('n ...
- react快速上手二(使用JSX语法)
前提: 下载依赖,配置 cnpm i babel-preset-react -D JSX语法的本质: 还是以 React.createElement 的形式来实现的,并没有直接把 用户写的 HTML代 ...
- centos 中 Java环境变量配置
一.安装java 1.搜索java包 yum search java 2.安装java包 -openjdk.x86_64 3.查看java安装目录 whereis java #找到Java目录 一般在 ...
- element之table自定义表头
1.实现效果 2.使用render-header可以自定义表头 <el-table-column prop="date" label="日期" sorta ...
- 【Day3】1.正则表达式
1.正则表达式 2.案例 关闭贪婪模式
- com.android.ddmlib.adbcommandrejectedexception:未经授权的设备。
出现这种问题的原因是adb被杀死了,根据网上的说法在platform-tools下双击adb.exe 也启动不了. 在命令提示符中执行 adb kill-server adb start-ser ...