Go语言编程中对文件读写的基本方法整理

这篇文章主要介绍了Go语言编程中对文件读写的基本方法整理,是Go语言入门学习中的基础知识,需要的朋友可以参考下

1.func Copy(dst Writer, src Reader) (written int64, err error)这个函数是从一个文件读取拷贝到另外一个文件,一直拷贝到读取文件的EOF,所以不会返回io.EOF错误,参数是写入目标器和读取目标器,返回int64的拷贝字节数和err信息

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


2.func CopyN(dst Writer, src Reader, n int64) (written int64, err error)看函数就知道了跟上述的是一样的,只是多加了一个读取数的限制,然后我们看下代码

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


3.func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error)这个函数就是从读取器中读取数据放到我们的buf中,限定了最小的读取字节数,如果我们读取的数据小于最小读取器,譬如你设定min的值是8,但是你读取的数据字节数是5就会返回一个`io.ErrUnexpectedEOF`,如果大于就会返回`io.ErrShortBuffer`,读取完毕会有`io.EOF`~~,多讲一些哈,这个Reader只要我们满足这个interface就可以用这个

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


其中*File就支持func (f *File) Read(b []byte) (n int, err error)

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


4.func ReadFull(r Reader, buf []byte) (n int, err error)这个函数和上边的函数是相似,只不过是读取len(buf)个,放在buf中

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


5.func WriteString(w Writer, s string) (n int, err error)弄完读了,当然带要写了,这个函数主要是向写入目标中写入字符创,返回是写入的字节数还有error错误,主要是权限的错误,其中写入呀!都是writer这个结构就可以写入

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


6.type LimitedReader

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


只实现了一个方法func (l *LimitedReader) Read(p []byte) (n int, err error)其实我们不难发现这个跟我们的ReadAtLast()就是亲兄弟的节奏

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


7.type PipeReader

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


(1)func Pipe() (*PipeReader, *PipeWriter)创建一个管道,并返回它的读取器和写入器,这个会在内存中进行管道同步,它的开启会io.Reader然后等待io.Writer的输入,没有内部缓冲,它是安全的调用Read和Write彼此和并行调用写

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


(2)func (r *PipeReader) Close() error管道关闭后,正在进行或后续的写入Write操作返回ErrClosedPipe
import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


(3)func (r *PipeReader) CloseWithError(err error) error这个就是上边的r.Close关闭的时候,写入器会返回错误的信息

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu } 


(4)func (r *PipeReader) Read(data []byte) (n int, err error)标准的阅读接口,它从管道中读取数据、阻塞一直到一个写入接口关闭,如果写入端发生错误,它就会返回错误,否则返回的EOF

import (
 "fmt"
 "io"
 "os"
)

func main() {  r, _ := os.Open("test.txt")  w, _ := os.Create("write.txt")  num, err := io.Copy(w, w)  if err != nil {   fmt.Println(err)  }  fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu }