您的位置:首页 > 编程语言 > Go语言

go语言文件操作

2015-05-06 11:54 831 查看
摘要: 本文主要解说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就能够了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: