- ReadFile
读取文件
package main import ( "fmt" "io/ioutil" "log" ) func main() { content, err := ioutil.ReadFile("test.txt") if err != nil { log.Fatal(err) } fmt.Printf("File contents: %s", content) }
WriteFile
写文件
package main import ( "io/ioutil" "log" ) func main() { message := []byte("Hello, Gophers!") err := ioutil.WriteFile("hello", message, 0644) if err != nil { log.Fatal(err) } }
8.标准库bufio包之读
(1).bufio的基础介绍
bufio包实现了有缓冲的I/O。它包装一个io.Reader
或io.Writer
接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。
(2).bufio实列读取
- bufio.NerReader()放入缓冲区 -默认4096
package main import ( "bufio" "fmt" "strings" ) func main() { reader := strings.NewReader("hello world") // 创建一个只能读的对象 reader2 := bufio.NewReader(reader) // 利用bufio存放读的数据对象 readString, _ := reader2.ReadString('\n') // 读出数据 fmt.Printf("%v\n", readString) }
2.bufio.NerReaderSize() 设置缓冲区大小
package main import ( "bufio" "fmt" "strings" ) func main() { reader := strings.NewReader("hello world") // 创建一个只能读的对象 reader2 := bufio.NewReaderSize(reader, 10) // 利用bufio存放读的数据对象 readString, _ := reader2.ReadString('\n') // 读出数据 fmt.Printf("%v\n", readString) }
9.标准库bufio之写
(1).bufio.writer()
写完之后,我们要刷新缓存
package main import ( "bufio" "os" ) func main() { file, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_APPEND, 777) writer := bufio.NewWriter(file) writer.WriteString("哈哈哈哈") writer.Flush() // 一定要刷新一下缓冲区 defer file.Close() }
10.标准库bufio之Scanner
(1). bufio.Scanner() 扫描
package main import ( "bufio" "fmt" "strings" ) func main() { reader := strings.NewReader("ABC DEF GHI JKL") scanner := bufio.NewScanner(reader) scanner.Split(bufio.ScanWords) // 以空格输出 for scanner.Scan() { // 假如说扫描不到值就返回false fmt.Printf("%v", scanner.Text()) } }
11.标准库log包
(1).介绍
golang内置了 log 包,实现简单的日志服务。通过调用 log 包的函数,可以实现简单的日志打印功能。
log使用
log包有三个系列的日志打印函数,分别是print
系列、panic
系列、fatal
系列。
- print : 单纯打印日志
- panic: 打印日志,抛出
panic
异常 - fatal: 打印/日志,强制结束程序(os.exit),
defer
函数不会执行。
(2).print 日志打印
package main import "log" func main() { log.Println("你好") //打印日志 log.Printf("my log %d->", 100) }
(3).panic 日志打印
就是在panic这个输出语句 输出之后,就会抛出异常。后面得语句就不会生效。除非定义在panic得方法和defer方法
package main import "log" func main() { defer println("11111111") log.Panicln("sdsd") //执行完这个语句之后,就抛出异常。后面的所有代码就失效了。 println("sdsd") }
(4).fatal 日志打印
package main import "log" func main() { defer println("11111111") //不会被打印 直接中断 log.Fatal("222222") println("3333333") }
(5).进行设置日志配置
log.SetOutput(file) //********日志配置**** 输出在这个文件中
package main import ( "log" "os" ) func main() { // log.Llongfile ->指出绝对路径 // log.Lshortfile -> 指出文件的位置 log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) // 日期和时间和文件的位置 log.SetPrefix("jsxs: ") // 前缀 file, err := os.OpenFile("test.txt", os.O_WRONLY|os.O_APPEND, 775) if err != nil { log.Println("文件有误") } log.SetOutput(file) //********日志配置**** 输出在这个文件中 log.Println("mylog...\n") }
(6).自定义logge
log 包为我们提供了内置函数,让我们能够自定义logger。从效果上来看,就是将标题3中的标准配置日志、日之前缀配置、日志输出位置整合到一个函数中,使日志配置不在那么繁琐。
log 包中提供了 func New(out io.Writer, prefix string, flag int) *loger
函数来实现定义logger
package main import ( "log" "os" ) func main() { file, err := os.OpenFile("test.txt", os.O_WRONLY|os.O_APPEND|os.O_CREATE, 775) if err != nil { log.Println("文件有误") } logger := log.New(file, "MyLog:", log.Ltime|log.Ldate|log.Lshortfile) // 设置格式 logger.Println("112121212122") }