Golang语言的 os 包中OpenFile 函数,如下所示:

func OpenFile(name string, flag int, perm FileMode) (*File, error) {
}

其中 name 是文件的文件名,如果不是在当前路径下运行需要加上具体路径;flag 是文件的处理参数,为 int 类型,根据系统的不同具体值可能有所不同,但是作用是相同的。

  1. O_RDONLY:只读模式打开文件;
  2. O_WRONLY:只写模式打开文件;
  3. O_RDWR:读写模式打开文件;
  4. O_APPEND:写操作时将数据附加到文件尾部(追加);
  5. O_CREATE:如果不存在将创建一个新文件;
  6. O_EXCL:和 O_CREATE 配合使用,文件必须不存在,否则返回一个错误;
  7. O_SYNC:当进行一系列写操作时,每次都要等待上次的 I/O 操作完成再进行;
  8. O_TRUNC:如果可能,在打开时清空文件。

【实例】该段代码为博主测试用于模拟输出日志。

package main

import (
"bufio"
"fmt"
"io"
"os"
"strings"
"sync"
"time"
) func main() {
var list []string
mx := sync.Mutex{}
LogFileReading(&list,&mx) for _, v := range list {
if strings.Contains(v,"/coco-server/v2/user-getGroupList") || strings.Contains(v,"/coco-server/v2/userSession/isPCOnline") ||
strings.Contains(v,"/coco-server/msg-synOffLineMsg") || strings.Contains(v,"/coco-server/msg-updateMsgIndex") {
time.Sleep(1 * time.Second)
LogFileWrite(v)
} }
} func LogFileReading(list *[]string,mutex *sync.Mutex) {
filePath := "目录"
inputFile, inputError := os.OpenFile(filePath,os.O_RDONLY,0)
if inputError != nil {
fmt.Sprintf("An error occurred on opening the inputfile\n" +
"Does the file exist?\n ")
return
}
//及时关闭file
defer inputFile.Close()
//读取文件时,使用带缓存的 *Reader
inputReading := bufio.NewReader(inputFile)
for {
//ReadString将文件内容真正的读取出来
inputString, readerError := inputReading.ReadString('\n')
if readerError == io.EOF {
return
}
mutex.Lock()
*list = append(*list, inputString)
mutex.Unlock()
}
} func LogFileWrite(v string) {
filePath := "目录"
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)
if err != nil {
fmt.Println("File open failed!", err)
}
//及时关闭file
defer file.Close() //写入文件时,使用带缓存的 *Writer
write := bufio.NewWriter(file)
write.WriteString(v)
//Flush将缓存的文件真正写入到文件中
write.Flush()
}

  

转载请声明出处哦~,本篇文章发布于Biuget-Golang的博客:

https://www.cnblogs.com/Biuget-Golang/

记-Golang日志文件读取及写入操作的更多相关文章

  1. java===java基础学习(5)---文件读取,写入操作

    文件的写入读取有很多方法,今天学到的是Scanner和PrintWriter 文件读取 Scanner in = new Scanner(Paths.get("file.txt") ...

  2. testbench的设计 文件读取和写入操作 源代码

    十大基本功之 testbench 1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应.端口分为 input,output 和 inout 类型产生激励信号的时 ...

  3. 用Java实现对英文版《飘》的文件读取与写入操作

    从文件读入<飘>的英文版,并将结果输出到文件中 要求一: 实现对英文版<飘>的字母出现次数统计 package File; import java.io.FileInputSt ...

  4. Apache commons-io实现单文件读取和写入

    Apache commons-io提供了很多类,这里只介绍FileUtils类. FileUtils类提供了一些操作文件对象的实用方法,包括文件的读取.写入.复制和比较等. 比如逐句读取和写入一个文件 ...

  5. HDFS数据流-剖析文件读取及写入

    HDFS数据流-剖析文件读取及写入 文件读取 1. 客户端通过调用FileSystem对象的open方法来打开希望读取的文件,对于HDFS来说,这个对象是分布式文件系统的一个实例.2. Distrib ...

  6. python文件读取和写入案例

    python文件读取和写入案例  直接上代码吧 都是说明 百度上找了很多,最终得出思路 没有直接可以读取修改的扩展,只能先读取,然后复制一份,然后在复制出来的文件里面追加保存 然后删除读的那个,但是缺 ...

  7. Java底层代码实现单文件读取和写入(解决中文乱码问题)

    需求: 将"E:/data/车站一次/阿坝藏族羌族自治州.csv"文件中的内容读取,写入到"E:/data//车站一次.csv". 代码: public cla ...

  8. Delphi txt文件读取及写入

    简介:Delphi支持三种文件类型:文本文件.记录文件.无类型文件.文本文件的读...   在进行win32开发中对文件的读写是最常用的操作之一 Delphi 支持三种文件类型:  文本文件.记录文件 ...

  9. java文件创建、删除、读取、写入操作大全

    一.获得控制台用户输入的信息 public String getInputMessage() throws IOException...{ System.out.println("请输入您的 ...

随机推荐

  1. 高颜值测试报告- XTestRunner

    Modern style test report based on unittest framework. 基于unittest框架现代风格测试报告. 特点 漂亮测试报告让你更愿意编写测试. 支持单元 ...

  2. LGP6276题解

    众所周知,排列是一个置换,一个置换是一车环. 步数就是这些环长的 \(lcm\). 如果你去思考直接 DP,会发现很困难,根本设不出来状态.于是考虑正难则反:每个质数幂 \(p^k\) 对答案的贡献. ...

  3. TypeScript方法的定义

    在 JavaScript 中,有两种方式定义方法. 1.命名的方法 function add(x,y){ return x+y;}2.匿名方法 var myAdd = function(x,y) { ...

  4. Python 基础知识自检,离深入掌握 Python 还有多远

    1. 模块化编程思想 模块化编程是 Python 的基本思想.初学 Python,都应该使用过小海龟.随机.数学模块.使用模块之前,需要导入模块,然后根据自己的问题需要使用这些模块. Python 提 ...

  5. MySQL — 索引

    目录 1.索引概述 2.索引结构 3.索引分类 4.索引语法 5.SQL 性能分析 5.1.执行频次 5.2.慢日志查询 5.3.profile 5.4.explain 6.索引使用规则 6.1.单列 ...

  6. DDOS防御实验----反射器的安全配置

    0x01 环境 共包含三台主机 一台centos7.3 为attact主机,装有python +Scapy 一台centos7.3,server,装有bind9 ntp memcached,作为DDO ...

  7. AVRmega16 LED 例程

                                                                                      AVRmega16 LED 例程   ...

  8. Android studio Error occurred during initialization of VM

    Unable to start the daemon process. This problem might be caused by incorrect configuration of the d ...

  9. JDK8新特性关于Stream流

    在Java1.8之前还没有stream流式算法的时候,我们要是在一个放有多个User对象的list集合中,将每个User对象的主键ID取出,组合成一个新的集合,首先想到的肯定是遍历,如下: 1 2 3 ...

  10. leedcode算法

    1.LeetCode - 合并两个链表 2. 3. 链表是否有环       https://jingyan.baidu.com/article/066074d69afb8d83c31cb068.ht ...