From ad92643e1180ffd9235421f05b369d462f6cb950 Mon Sep 17 00:00:00 2001 From: pengshiyu <1940607002@qq.com> Date: Fri, 7 Oct 2022 15:46:14 +0800 Subject: [PATCH] fix --- blog/golang/golang-standard-bufio.md | 72 ++++++++ blog/golang/golang-standard-builtin.md | 1 + blog/golang/golang-standard-io.md | 115 +++++++++++++ blog/golang/golang-standard-ioutil.md | 160 ++++++++++++++++++ blog/golang/golang-standard-log.md | 140 +++++++++++++++ ...lang-standard.md => golang-standard-os.md} | 118 +------------ blog/golang/index.md | 10 +- 7 files changed, 497 insertions(+), 119 deletions(-) create mode 100644 blog/golang/golang-standard-bufio.md create mode 100644 blog/golang/golang-standard-builtin.md create mode 100644 blog/golang/golang-standard-io.md create mode 100644 blog/golang/golang-standard-ioutil.md create mode 100644 blog/golang/golang-standard-log.md rename blog/golang/{golang-standard.md => golang-standard-os.md} (78%) diff --git a/blog/golang/golang-standard-bufio.md b/blog/golang/golang-standard-bufio.md new file mode 100644 index 0000000..6ca316c --- /dev/null +++ b/blog/golang/golang-standard-bufio.md @@ -0,0 +1,72 @@ +# Golang标准库-bufio + +bufio库实现了有缓冲的I/O + +读示例 + +```go +package main + +import ( + "bufio" + "fmt" + "strings" +) + +func main() { + reader := strings.NewReader("hello world") + + bufReader := bufio.NewReader(reader) + + s, _ := bufReader.ReadString('\n') + fmt.Printf("s: %v\n", s) + // s: hello world +} + +``` + +写示例 + +```go +package main + +import ( + "bufio" + "os" +) + +func main() { + f, _ := os.OpenFile("demo.txt", os.O_RDWR, 0777) + defer f.Close() + + w := bufio.NewWriter(f) + w.WriteString("hello") + w.Flush() +} + +``` + +Scanner 示例 + +```go +package main + +import ( + "bufio" + "fmt" + "strings" +) + +func main() { + r := strings.NewReader("AAA BBB CCC") + s := bufio.NewScanner(r) + s.Split(bufio.ScanWords) + for s.Scan() { + fmt.Printf("s.Text(): %v\n", s.Text()) + } + // s.Text(): AAA + // s.Text(): BBB + // s.Text(): CCC +} + +``` diff --git a/blog/golang/golang-standard-builtin.md b/blog/golang/golang-standard-builtin.md new file mode 100644 index 0000000..2cbb6b1 --- /dev/null +++ b/blog/golang/golang-standard-builtin.md @@ -0,0 +1 @@ +# Golang标准库-builtin diff --git a/blog/golang/golang-standard-io.md b/blog/golang/golang-standard-io.md new file mode 100644 index 0000000..ae7fa77 --- /dev/null +++ b/blog/golang/golang-standard-io.md @@ -0,0 +1,115 @@ +# Golang标准库-io输入输出 + +io包封装了如下操作 + +- io 为IO原语操作(I/O primitives)提供基本的接口 os、File、Reader、Writer +- io/ioutil 封装了一些实用函数 +- fmt 实现了格式化I/O,类似C语言中的printf 和 scanf +- bufio 实现带缓冲的I/O + +基本的IO接口 + +```go +type Reader interface { + Read(p []byte) (n int, err error) +} + +type Writer interface { + Write(p []byte) (n int, err error) +} +``` + +以下类型实现了Reader和Writer接口 + +```go +os.File (Reader和Writer) +strings.Reader (Reader) +bufio.Reader (Reader) +bufio.Writer (Writer) +bytes.Buffer (Reader和Writer) +bytes.Reader (Reader) +compress/gzip.Reader (Reader) +compress/gzip.Writer (Writer) +crypto/cipher.StreamReader (Reader) +crypto/cipher.StreamWriter (Writer) +crypto/tls.Conn (Reader和Writer) +encoding/csv.Reader (Reader) +encoding/csv.Writer (Writer) +``` + +示例 + +```go +package main + +import ( + "fmt" + "strings" +) + +func main() { + r := strings.NewReader("Hello world") + buf := make([]byte, 5) + n, err := r.Read(buf) + if err != nil { + fmt.Printf("err: %v\n", err) + } else { + fmt.Printf("n: %v\n", n) + // n: 5 + fmt.Printf("buf: %v\n", string(buf)) + // buf: Hello + } + +} + +``` + +reader拷贝到writer + +```go +package main + +import ( + "fmt" + "io" + "os" + "strings" +) + +func main() { + r := strings.NewReader("Hello world") + + // 复制到标准输出流,实际效果为:打印到控制台 + _, err := io.Copy(os.Stdout, r) + if err != nil { + fmt.Printf("err: %v\n", err) + } + // Hello world +} + +``` + +带缓冲区的拷贝 + +```go +package main + +import ( + "fmt" + "io" + "os" + "strings" +) + +func main() { + r := strings.NewReader("Hello world") + buf := make([]byte, 8) + + _, err := io.CopyBuffer(os.Stdout, r, buf) + if err != nil { + fmt.Printf("err: %v\n", err) + } + // Hello world +} + +``` diff --git a/blog/golang/golang-standard-ioutil.md b/blog/golang/golang-standard-ioutil.md new file mode 100644 index 0000000..2894daa --- /dev/null +++ b/blog/golang/golang-standard-ioutil.md @@ -0,0 +1,160 @@ +# Golang标准库-ioutil + +| 函数名 | 作用 +| - | - +| ReadAll | 读取数据,返回读到的字节slice +| ReadDir | 读取一个目录,返回目录入口数组 []os.FileInfo +| ReadFile | 读取文件,返回文件内容(字节slice) +| WriteFile| 根据文件路径,写入字节slice +| TempDir| 在一个目录中创建指定前缀名的临时目录,返回新临时目录的路径 +| TempFile| 在一个目录中创建指定前缀名的临时文件,返回os.File + + +示例 + +```go +package main + +import ( + "fmt" + "io/ioutil" + "strings" +) + +func main() { + r := strings.NewReader("Hello world") + b, err := ioutil.ReadAll(r) + + if err != nil { + fmt.Printf("err: %v\n", err) + } else { + fmt.Printf("string(b): %v\n", string(b)) + // string(b): Hello world + } +} + +``` + +从文件中读取 + +```go +package main + +import ( + "fmt" + "io/ioutil" + "os" +) + +func main() { + f, _ := os.Open("demo.txt") + defer f.Close() + + b, err := ioutil.ReadAll(f) + + if err != nil { + fmt.Printf("err: %v\n", err) + } else { + fmt.Printf("string(b): %v\n", string(b)) + // string(b): Hello world + } +} + +``` + +读取当前目录下所有文件 + +```go +package main + +import ( + "fmt" + "io/ioutil" +) + +func main() { + + fi, _ := ioutil.ReadDir(".") + + for _, v := range fi { + fmt.Printf("v.Name(): %v\n", v.Name()) + } + +} + +``` + +读取文件 + +```go +package main + +import ( + "fmt" + "io/ioutil" +) + +func main() { + + b, _ := ioutil.ReadFile("demo.txt") + + fmt.Printf("string(b): %v\n", string(b)) + +} + +``` + +写入文件内容 + +```go +package main + +import ( + "io/ioutil" +) + +func main() { + + ioutil.WriteFile("demo.txt", []byte("hello"), 0644) + +} + +``` + +临时文件 + +```go +package main + +import ( + "io/ioutil" + "log" + "os" +) + +func main() { + + // 创建临时文件 + tempfile, err := ioutil.TempFile("", "temp") + + if err != nil { + log.Fatal(err) + } + + // 函数结束移除临时文件 + defer os.Remove(tempfile.Name()) // clean up + + // 向临时文件写入字节数组 + content := []byte("hello world") + + if _, err := tempfile.Write(content); err != nil { + log.Fatal(err) + } + + if err := tempfile.Close(); err != nil { + log.Fatal(err) + } + +} + +``` \ No newline at end of file diff --git a/blog/golang/golang-standard-log.md b/blog/golang/golang-standard-log.md new file mode 100644 index 0000000..6f5e0ad --- /dev/null +++ b/blog/golang/golang-standard-log.md @@ -0,0 +1,140 @@ +# Golang标准库-log + +log包,实现了简单的日志服务 + +log包中有3个系列的日志打印函数 + +函数系列 | 作用 +- | - +print | 单纯的打印日志 +panic | 打印日志,抛出panic异常 +fatal | 打印日志,强制结束程序`os.Exit(1)`, `defer` 函数不会执行 + +Print 示例 + +```go +package main + +import ( + "log" +) + +func main() { + log.Print("Hello") + // 2022/10/07 15:24:38 Hello + + log.Println("Hello") + // 2022/10/07 15:25:08 Hello\n + + log.Printf("Hello %d", 20) + // 2022/10/07 15:25:08 Hello 20 +} + +``` + +Panic 示例 + +```go +package main + +import ( + "fmt" + "log" +) + +func main() { + defer fmt.Println("defer") + + log.Panic("Hello") + + fmt.Println("after Panic") + // 2022/10/07 15:27:10 Hello + // defer + // panic: Hello +} + +``` + +Fatal 示例 + +```go +package main + +import ( + "fmt" + "log" +) + +func main() { + defer fmt.Println("defer") + + log.Fatal("Hello") + + fmt.Println("after Panic") + // 2022/10/07 15:28:48 Hello + // exit status 1 +} + +``` + +log配置 + +```go +package main + +import ( + "log" + "os" +) + +func init() { + // 输出格式 长日期 长时间 短文件名 + log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) + + // 设置前缀 + log.SetPrefix("main: ") + + // 设置日志输出文件 + f, err := os.OpenFile("demo.log", os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0664) + // defer f.Close() + + if err != nil { + log.Fatal("日志文件打开错误") + } + + log.SetOutput(f) + +} + +func main() { + log.Print("Hello") + // main: 2022/10/07 15:35:13 main.go:16: Hello + +} + +``` + +自定义logger + +```go +package main + +import ( + "log" + "os" +) + +var logger *log.Logger + +func init() { + // func New(out io.Writer, prefix string, flag int) *Logger + logger = log.New(os.Stdout, "main: ", log.Ldate|log.Ltime|log.Lshortfile) +} + +func main() { + logger.Print("Hello") + // main: 2022/10/07 15:35:13 main.go:16: Hello + +} + +``` \ No newline at end of file diff --git a/blog/golang/golang-standard.md b/blog/golang/golang-standard-os.md similarity index 78% rename from blog/golang/golang-standard.md rename to blog/golang/golang-standard-os.md index 2f9ae9b..ec51459 100644 --- a/blog/golang/golang-standard.md +++ b/blog/golang/golang-standard-os.md @@ -1,4 +1,4 @@ -# 第二十一章 Golang标准库 +# Golang标准库-os 标准库文档:https://pkg.go.dev/std @@ -509,119 +509,3 @@ func main() { } ``` - -## io模块-输入输出 - -io包封装了如下操作 - -- io 为IO原语操作(I/O primitives)提供基本的接口 os、File、Reader、Writer -- io/ioutil 封装了一些实用函数 -- fmt 实现了格式化I/O,类似C语言中的printf 和 scanf -- bufio 实现带缓冲的I/O - -基本的IO接口 - -```go -type Reader interface { - Read(p []byte) (n int, err error) -} - -type Writer interface { - Write(p []byte) (n int, err error) -} -``` - -以下类型实现了Reader和Writer接口 - -```go -os.File (Reader和Writer) -strings.Reader (Reader) -bufio.Reader (Reader) -bufio.Writer (Writer) -bytes.Buffer (Reader和Writer) -bytes.Reader (Reader) -compress/gzip.Reader (Reader) -compress/gzip.Writer (Writer) -crypto/cipher.StreamReader (Reader) -crypto/cipher.StreamWriter (Writer) -crypto/tls.Conn (Reader和Writer) -encoding/csv.Reader (Reader) -encoding/csv.Writer (Writer) -``` - -示例 - -```go -package main - -import ( - "fmt" - "strings" -) - -func main() { - r := strings.NewReader("Hello world") - buf := make([]byte, 5) - n, err := r.Read(buf) - if err != nil { - fmt.Printf("err: %v\n", err) - } else { - fmt.Printf("n: %v\n", n) - // n: 5 - fmt.Printf("buf: %v\n", string(buf)) - // buf: Hello - } - -} - -``` - -reader拷贝到writer - -```go -package main - -import ( - "fmt" - "io" - "os" - "strings" -) - -func main() { - r := strings.NewReader("Hello world") - - // 复制到标准输出流,实际效果为:打印到控制台 - _, err := io.Copy(os.Stdout, r) - if err != nil { - fmt.Printf("err: %v\n", err) - } - // Hello world -} - -``` - -带缓冲区的拷贝 - -```go -package main - -import ( - "fmt" - "io" - "os" - "strings" -) - -func main() { - r := strings.NewReader("Hello world") - buf := make([]byte, 8) - - _, err := io.CopyBuffer(os.Stdout, r, buf) - if err != nil { - fmt.Printf("err: %v\n", err) - } - // Hello world -} - -``` \ No newline at end of file diff --git a/blog/golang/index.md b/blog/golang/index.md index 7f48455..cec4e24 100644 --- a/blog/golang/index.md +++ b/blog/golang/index.md @@ -48,10 +48,16 @@ [第二十章 Golang 并发编程](/blog/golang/golang-concurrency.md) -[第二十一章 Golang标准库](/blog/golang/golang-standard.md) +第二十一章 Golang标准库 +- [Golang标准库-os](/blog/golang/golang-standard-os.md) +- [Golang标准库-io输入输出](/blog/golang/golang-standard-io.md) +- [Golang标准库-ioutil](/blog/golang/golang-standard-ioutil.md) +- [Golang标准库-bufio](/blog/golang/golang-standard-bufio.md) +- [Golang标准库-log](/blog/golang/golang-standard-log.md) +- [Golang标准库-builtin](/blog/golang/golang-standard-builtin.md) https://www.bilibili.com/video/BV1ME411Y71o?p=27&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da -https://www.bilibili.com/video/BV1zR4y1t7Wj?p=84&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da \ No newline at end of file +https://www.bilibili.com/video/BV1zR4y1t7Wj?p=89&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da \ No newline at end of file -- GitLab