之前聊过,操作文件——读写文件,直接调用接口即可. 如果是一直写入操作,写入操作一直进行的,免不了会有,有时一大批数据过来,有时没有一条数据。

鉴于此场景,选择用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——写文件和读文件的更多相关文章

  1. 根据python上下文管理,写一个在读文件内容前后自动打开关闭文件的程序

    利用上下文管理实现读f文件前后自动打开关闭文件#在本目录创建f文件,内容写monkey代码如下 import contextlib #导入模块1 @contextlib.contextmanager# ...

  2. golang bufio、ioutil读文件的速度比较(性能测试)和影响因素分析

    前言 golang读取文件的方式主要有4种: 使用File自带的Read方法 使用bufio库的Read方法 使用io/ioutil库的ReadAll() 使用io/ioutil库的ReadFile( ...

  3. Json文件转换为Excel文件!涉及读文件,时间戳转化,写文档

    一. 思路 今天接到个小任务,让把json文件转换成excel文件,按照列展开. 思路:既然json已经都已经是现成的,那直接将json文件做读操作,在通过不同的key,找到对应的信息,在存到单元格中 ...

  4. GoLang几种读文件方式的比较

    GoLang提供了很多读文件的方式,一般来说常用的有三种.使用Read加上buffer,使用bufio库和ioutil 库. 那他们的效率如何呢?用一个简单的程序来评测一下: package main ...

  5. C++写和读文件

    1.写: /*C++写文件和读文件*/ #include <stdio.h> #include <stdlib.h> int main() { FILE * fp; fp = ...

  6. Python学习入门基础教程(learning Python)--5.2 Python读文件基础

    上节简单的说明了一下Pyhon下的文件读写基本流程,从本节开始,我们做几个小例子来具体展示一下Python下的文件操作,本节主要是详细讲述Python的文件读操作. 下面举一个例子,例子的功能是读取当 ...

  7. C# IO操作(四)大文件拷贝(文件流的使用)、文件编码

         大文件拷贝(文件流的使用).文件编码 首先说一下大文件拷贝和文件流,因为计算机的内存资源是有限的,面对几个G甚至更大的文件,需要通过程序来完成拷贝,就需要用到文件流(因为我们无法做到把文件一 ...

  8. 在Linux中要修改一个文件夹或文件的权限

    在Linux中要修改一个文件夹或文件的权限我们需要用到linux chmod命令来做,下面我写了几个简单的实例大家可参考一下. 语法如下: chmod [who] [+ | - | =] [mode] ...

  9. java 安卓开发之文件的读与写

    java文件的读与写,代码: String file="user.txt"; private void writeFileData(String str1, String str2 ...

随机推荐

  1. Webstorm2017.3.3软件的安装使用

    下载 ▶进入jetbrains的官方网站点击download,即下载开始.官方网站链接:http://www.jetbrains.com/webstorm/ 安装 ▶双击刚下载完成的.exe文件开始进 ...

  2. Flask+gevent-websocket模块实现websocket

    后端代码: from flask import Flask,request from geventwebsocket.handler import WebSocketHandler from geve ...

  3. Django学习:连接Mysql数据库

    开发环境: Windows 10 Python 3.7.4 Django 2.2.6 Mysql 8.0.17 承接上一节:https://www.cnblogs.com/daydayupup/p/1 ...

  4. freeertos中关于PendSV中断服务函数的解析

    __asm void xPortPendSVHandler( void ) { extern uxCriticalNesting; extern pxCurrentTCB; extern vTaskS ...

  5. JAVA-如何打包成jar包

    主线:编译 - 打包 - 运行 准备工作: 1. 手动打可直接执行的jar包 1) 先使用javac编译java文件,得到class文件 2) 新建文件,名字任起,比如可以叫manifest,内容如下 ...

  6. 图像处理---《Canny 边缘检测》

    图像处理---<Canny 边缘检测> 很想系统的把图像处理之边缘检测部分详细的过一遍,对比一个各个算子的优良性能.时间紧,精力有限,现在只能走哪补哪,随手记. 有几个简单的场景,有需要, ...

  7. 接口自动化平台——httprunnermanager

    Windows 环境搭建 1. 下载安装pip install httprunner==1.4.2hrun -V #1.4.2har2case -V #0.1.8 2. httprunnermanag ...

  8. C#信号量(Semaphore,SemaphoreSlim)

    Object->MarshalByRefObject->WaitHandle->Semaphore 1.作用: 多线程环境下,可以控制线程的并发数量来限制对资源的访问 2.举例: S ...

  9. 内网监控zabbix

    告警 告警方式:linkedsee 类型:使用脚本linkedsee.sh [root@zabbix-server ~]# cat linkedsee.sh #! /bin/bash SERVICE_ ...

  10. vmware添加新硬盘磁盘扫描脚本

    #! /bin/bash echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -" > ...