go语言文件操作

摘要: 本文主要解说go语言的文件操作.系统底层的open\write等系统调用,往往操作的文件对象是文件描写叙述符;而C语言库的文件操作须要借助fopen/fread等函数,它们的操作对象是文件指针.go语言中,对文件操作进行了进一步封装……

1.os包中File类

首先,file类是在os包中的,封装了底层的文件描写叙述符和相关信息,同一时候封装了Read和Write的实现。

type File struct {
    *file
}

type file struct {
    fd  int
    name string
    dirinfo *dirInfo
    nepipe  int
}

func (f *File) Fd( )uintptr{
    if f== nil{
        return ^(uintptr(0))
    }
    return uintptr(f.fd)
}

//注意,上文中为什么能够用f.fd这个语法,f是File,而File中没有成员?

func (f *File) Close() error{

}

func (f *File)Stat ()(fi FileInfo, err error){

}

同一时候File类还实现了例如以下方法:

func (f *File) read(b []byte) (n int, err error);
func (f *File) write(b []byte) (n int, err error) ;
func (f *File) seek(offset int64, whence int) (ret int64, err error) ;

2.io.ReadCloser

在go语言中,带有er后缀的往往是接口,ReadCloser顾名思义,就是包括Read和Close方法的借口。我们去看看这两个接口的定义和实现:

type Reader interface {
    Read(p []byte) (n int, err error)
}
type Closer interface {
    Close() error
}

注意:不同的包中对Reader的定义是不同的,以下是bufio中对Reader的定义

3. bufio package

type Reader struct {
    // contains filtered or unexported fields
}

type Reader struct {
            buf          []byte
            rd           io.Reader
            r, w         int
            err          error
            lastByte     int
            lastRuneSize int
}

bufio是带有缓冲的io读写包,我们先来看一个样例:

    package main
    import (
        "fmt"
        "os"
        "bufio"
        "io"
    )
    func main() {
        f, err := os.Open("c:\\aaa.txt")//打开文件
        defer f.Close() //打开文件出错处理
        if nil == err {
            buff := bufio.NewReader(f) //读入缓存
            for {
                line, err := buff.ReadString(‘\n‘) //以‘\n‘为结束符读入一行
                if err != nil || io.EOF == err {
                    break
                }
                fmt.Print(line)  //能够对一行进行处理
            }
        }
    }

func NewReader(rd io.Reader) *Reader

//NewReader returns a new Reader whose buffer has the default size.

4.实例

type Request struct {
    // The message body.
    ...
    Body io.ReadCloser
    ...
}

所以说,假设我们想实现Request中的Body,只须要实现io package中的两个interface就能够了.

时间: 2024-10-02 07:25:53

go语言文件操作的相关文章

C语言文件操作函数的编写

 编写文件操作的头文件 /************************************************************************** Copyright(C)    :2014-08-5 toto Filename       :file.h Author          :涂作权 Version         :V1.1 Date            :2014-08-05 Description     :文件操作的头文件 Others  

C 语言文件操作

1. 数据流:     程序与数据的交互以流的形式进行.fopen 即打开数据流,fclose 即刷新数据流.     所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不能随机存取:也意味着是一段连续的内容,每块数据之间的顺序是确定的.比如一个很大的文件,不能一次性加载到内存里面,无法直接获取文件任意位置的内容,只能逐渐加载到内存.     比如 TCP 被抽象为 stream 而 UDP 被抽象为 block.     2. 缓冲区:     fopen 时, 磁盘 --> 缓冲区

c语言文件操作函数

c语言文件操作函数大全 fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存在. r+ 打开可读写的文件,该文件必须存在. w 打开只写文件,若文件存在则文件长度清为0,即该文件

go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )

go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 文件操作 func Open(name string) (file *File, err error),*File 是实现了 io.Reader这个接口byte[] 转化为 bytes.Buffer:bytes.NewBuffer([]byte). 一.建立与打开 建立文件函数:func Create(name string) (file *File, err Error)func N

C语言文件操作(一)

实例1:读写字符文件,每次读取一个字符. #include<stdio.h> #include <stdlib.h> int main() { FILE *fpin ; FILE *fpout; char c; fpout=fopen("c:\\dest.txt","wt"); if((fpin=fopen("c:\\test.txt","rt"))!=NULL) { c = fgetc(fpin);

C语言文件操作(二)

实例2:读取字符文件,每次读入一个缓存里面. #include<stdio.h> #include <stdlib.h> #define MAXLEN 1024 int main() { FILE *fin; FILE *fout=fopen("c:\\dest.txt","wt"); char buf[MAXLEN]; if((fin=fopen("c:\\test.txt","rt"))!=NULL

C语言文件操作(三)

实例3:读写字节文件,每次读入一个缓存里面. #include<stdio.h> #include <stdlib.h> #define MAXLEN 1024 int main() { FILE *fpin ; FILE *fpout; unsigned char buf[MAXLEN]; int c; fpout=fopen("c:\\dest.jpg","wb"); if((fpin=fopen("c:\\test.jpg&q

C语言文件操作(四)

实例四:随机读写.在C:\\TEST.TXT 文件中创建如下字符串:我爱你,中国 使用随机读写,输出"中国"两个字,以为中文字符占两个字节,所以要从文件首部向后偏移7个字节,逗号是英文字符,占用一个字节. #include<stdio.h> #include <stdlib.h> int main() { FILE *fp ; char c; if((fp=fopen("c:\\test.txt","rb"))!=NULL

C语言文件操作函数大全(超详细)

C语言文件操作函数大全(超详细) 作者: 字体:[增加 减小] 类型:转载 本篇文章是对C语言中的文件操作函数进行了详细的总结分析,需要的朋友参考下 fopen(打开文件)相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态.mode有下列几种形态字符串:r 打开只读文件,

C语言 文件操作API介绍

文件的基本概念 所谓“文件”是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名. 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等.文件通常是驻留在外部介质(如磁盘等)上的, 在使用时才调入内存中来.从不同的角度可对文件作不同的分类.从用户的角度看,文件可分为普通文件和设备文件两种. 普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集,可以是源文件.目标文件.可执行程序:也可以是一组待输入处理的原始数据,或者是一组输出的结果.