结构体Reader的类型在bufio包中已经定义好了,而使用NewReader()就能返回一个Reader结构体的*类型再用值接收,就能用值调用*Reader其他方法了
如
练习1:
练习2:chapter14File/
注意Write结构体指针中 在用到WriteString方法时才用Flush方法
package main
import (
"bufio"
"log"
"os"
)
//最终系统自动创建了文件,并且里面有内容
//在这里输出不了信息,因为在os.OpenFile()第二个参数已经设定好了os.O_WRONLY只能读
//在这里输出不了信息,但可以直接去看文件的变化,自动创建了一个新文件D:/abc.txt,并有内容
func main() {
filePath := "D:/abc.txt"
//创建一个新文件D:/abc.txt,写入内容 5句 "hello, Gardon"
//1 .打开文件 D:/abc.txt
//返回*File,error
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
log.Fatal(err)
return //直接结束main,不再执行后面代码
}
//及时关闭file指针
defer file.Close()
//准备写入5句 "hello, Gardon"
str := "hello,Gardon\r\n" // 有些系统是\r\n 表示换行
//写入时,使用带缓存的 *Writer
/*
go标准库文档中文版
bufio包中 func NewWriter
func NewWriter(w io.Writer) *Writer
NewWriter创建一个具有默认大小缓冲、写入w的*Writer。
*/
write := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
write.WriteString(str)
/*
func (*Writer) WriteString
func (b *Writer) WriteString(s string) (int, error)
*/
//WriteString写一个字符串。
//不理他,英翻中 它返回的字节数。如果计数小于len (s),这也解释了为什么写短返回一个错误。
}
//官网:写任何缓冲的数据刷新到底层io.Writer。
//因为writer是带缓存,因此在调用WriteString方法时,其实
//内容是先写入到缓存的,所以需要调用Flush方法,将缓冲的数据
//真正写入到文件中, 否则文件中会没有数据!!!
write.Flush()
/*
写任何缓冲的数据刷新到底层io.Writer其实就是file,
func NewWriter(w io.Writer) *Writer
write := bufio.NewWriter(file)
func (b *Writer) Flush() error
*/
}
代码和Reader肯定是差不多的