如何高效运用GO语言进行复杂长尾文件读写操作?

2026-04-11 08:331阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1038个文字,预计阅读时间需要5分钟。

如何高效运用GO语言进行复杂长尾文件读写操作?

文件操作:使用`os.Open()`函数打开一个文件,返回一个*File和error。对得到的文件实例调用`close()`方法关闭文件。读取文件内容:使用`file.Read()`或`bufio`读取文件,或使用`ioutil`读取整个文件。

文件操作

打开和关闭文件

os.Open()函数打开一个文件

返回一个*File和一个err

对得到的文件实例调用close()方法关闭文件

读取文件

file.Read()

bufio读取文件

ioutil读取整个文件

如何高效运用GO语言进行复杂长尾文件读写操作?

package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) // 打开文件 func readFormFile1() { fileObj, err := os.Open("./main.go") if err != nil { fmt.Printf("open file failed, err:%v", err) return } // 记得关闭文件 defer fileObj.Close() // 读文件 // var tmp = make([]byte, 128) // 指定读的长度 var tmp [128]byte for { n, err := fileObj.Read(tmp[:]) if err == io.EOF { fmt.Println("读完了") return } if err != nil { fmt.Printf("read from file failed, err:%v\n", err) return } fmt.Printf("读了%d个字节\n", n) fmt.Println(string(tmp[:n])) if n < 128 { return } } } // 利用bufio这个包读取文件 func readFormFilebyBufio() { fileObj, err := os.Open("./main.go") if err != nil { fmt.Printf("open file failed, err:%v", err) return } // 记得关闭文件 defer fileObj.Close() // 创建一个用来从文件中读内容的对象 reader := bufio.NewReader(fileObj) for { line, err := reader.ReadString('\n') //注意是字符 if err == io.EOF { if len(line) != 0 { fmt.Println(line) } fmt.Println("文件读完了") break } if err != nil { fmt.Println("read file failed, err:", err) return } fmt.Print(line) } } // ioutil读取整个文件 func readFormFileByIoutil() { content, err := ioutil.ReadFile("./main.go") if err != nil { fmt.Println("read file failed, err:", err) return } fmt.Println(string(content)) } func main() { // readFormFile1() // readFormFilebyBufio() readFormFileByIoutil() } package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) // 打开文件 func readFormFile1() { fileObj, err := os.Open("./main.go") if err != nil { fmt.Printf("open file failed, err:%v", err) return } // 记得关闭文件 defer fileObj.Close() // 读文件 // var tmp = make([]byte, 128) // 指定读的长度 var tmp [128]byte for { n, err := fileObj.Read(tmp[:]) if err == io.EOF { fmt.Println("读完了") return } if err != nil { fmt.Printf("read from file failed, err:%v\n", err) return } fmt.Printf("读了%d个字节\n", n) fmt.Println(string(tmp[:n])) if n < 128 { return } } } // 利用bufio这个包读取文件 func readFormFilebyBufio() { fileObj, err := os.Open("./main.go") if err != nil { fmt.Printf("open file failed, err:%v", err) return } // 记得关闭文件 defer fileObj.Close() // 创建一个用来从文件中读内容的对象 reader := bufio.NewReader(fileObj) for { line, err := reader.ReadString('\n') //注意是字符 if err == io.EOF { if len(line) != 0 { fmt.Println(line) } fmt.Println("文件读完了") break } if err != nil { fmt.Println("read file failed, err:", err) return } fmt.Print(line) } } // ioutil读取整个文件 func readFormFileByIoutil() { content, err := ioutil.ReadFile("./main.go") if err != nil { fmt.Println("read file failed, err:", err) return } fmt.Println(string(content)) } func main() { // readFormFile1() // readFormFilebyBufio() readFormFileByIoutil() }

文件写入操作

Write和WriteString

bufio.NewWriter

ioutil.WriteFile

package main import ( "bufio" "fmt" "io/ioutil" "os" ) // 打开文件写内容 func writeDemo1() { fileObj, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) if err != nil { fmt.Println("open file failed, err:", err) return } defer fileObj.Close() // write str := "吹尽狂沙始到金\n" fileObj.Write([]byte(str)) //写入字节切片数据 fileObj.WriteString("学而不思则罔") //直接写入字符串数据 } // bufio.NewWriter func writeDemo2() { fileObj, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) if err != nil { fmt.Println("open file failed, err:", err) return } defer fileObj.Close() // 创建一个写的对象 writer := bufio.NewWriter(fileObj) for i := 0; i < 10; i++ { writer.WriteString("天降大任于斯人也\n") //将数据先写入缓存 } writer.Flush() //将缓存中的内容写入文件 } // ioutil.WriteFile func writeDemo3() { str := "圣人以治天下为事者也,必知乱之所自起,焉能治之;不知乱之所自起,则不能治。" err := ioutil.WriteFile("./xx.txt", []byte(str), 0666) if err != nil { fmt.Println("write file failed, err:", err) return } } func main() { // writeDemo1() // writeDemo2() writeDemo3() }

二进制实用途

package main import "fmt" // 二进制实用途 const ( eat int = 4 sleep int = 2 da int = 1 ) // 111 // 左边的1表示吃饭 100 // 中间的1表示睡觉 010 // 右边的1表示打豆豆 001 func f(arg int) { fmt.Printf("%b\n", arg) } func main() { f(eat | da) // 101 f(eat | sleep | da) // 111 }

获取用户输入时如果有空格的处理

package main import ( "bufio" "fmt" "os" ) // 获取用户输入时如果有空格 func useScan() { var s string fmt.Print("请输入内容:") fmt.Scanln(&s) fmt.Printf("您输入的内容是:%s\n", s) } func useBufio() { var s string reader := bufio.NewReader(os.Stdin) // NewReader的参数就是接口类型 fmt.Print("请输入内容:") s, _ = reader.ReadString('\n') fmt.Printf("您输入的内容是:%s\n", s) } func main() { // useScan() useBufio() }

本文共计1038个文字,预计阅读时间需要5分钟。

如何高效运用GO语言进行复杂长尾文件读写操作?

文件操作:使用`os.Open()`函数打开一个文件,返回一个*File和error。对得到的文件实例调用`close()`方法关闭文件。读取文件内容:使用`file.Read()`或`bufio`读取文件,或使用`ioutil`读取整个文件。

文件操作

打开和关闭文件

os.Open()函数打开一个文件

返回一个*File和一个err

对得到的文件实例调用close()方法关闭文件

读取文件

file.Read()

bufio读取文件

ioutil读取整个文件

如何高效运用GO语言进行复杂长尾文件读写操作?

package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) // 打开文件 func readFormFile1() { fileObj, err := os.Open("./main.go") if err != nil { fmt.Printf("open file failed, err:%v", err) return } // 记得关闭文件 defer fileObj.Close() // 读文件 // var tmp = make([]byte, 128) // 指定读的长度 var tmp [128]byte for { n, err := fileObj.Read(tmp[:]) if err == io.EOF { fmt.Println("读完了") return } if err != nil { fmt.Printf("read from file failed, err:%v\n", err) return } fmt.Printf("读了%d个字节\n", n) fmt.Println(string(tmp[:n])) if n < 128 { return } } } // 利用bufio这个包读取文件 func readFormFilebyBufio() { fileObj, err := os.Open("./main.go") if err != nil { fmt.Printf("open file failed, err:%v", err) return } // 记得关闭文件 defer fileObj.Close() // 创建一个用来从文件中读内容的对象 reader := bufio.NewReader(fileObj) for { line, err := reader.ReadString('\n') //注意是字符 if err == io.EOF { if len(line) != 0 { fmt.Println(line) } fmt.Println("文件读完了") break } if err != nil { fmt.Println("read file failed, err:", err) return } fmt.Print(line) } } // ioutil读取整个文件 func readFormFileByIoutil() { content, err := ioutil.ReadFile("./main.go") if err != nil { fmt.Println("read file failed, err:", err) return } fmt.Println(string(content)) } func main() { // readFormFile1() // readFormFilebyBufio() readFormFileByIoutil() } package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) // 打开文件 func readFormFile1() { fileObj, err := os.Open("./main.go") if err != nil { fmt.Printf("open file failed, err:%v", err) return } // 记得关闭文件 defer fileObj.Close() // 读文件 // var tmp = make([]byte, 128) // 指定读的长度 var tmp [128]byte for { n, err := fileObj.Read(tmp[:]) if err == io.EOF { fmt.Println("读完了") return } if err != nil { fmt.Printf("read from file failed, err:%v\n", err) return } fmt.Printf("读了%d个字节\n", n) fmt.Println(string(tmp[:n])) if n < 128 { return } } } // 利用bufio这个包读取文件 func readFormFilebyBufio() { fileObj, err := os.Open("./main.go") if err != nil { fmt.Printf("open file failed, err:%v", err) return } // 记得关闭文件 defer fileObj.Close() // 创建一个用来从文件中读内容的对象 reader := bufio.NewReader(fileObj) for { line, err := reader.ReadString('\n') //注意是字符 if err == io.EOF { if len(line) != 0 { fmt.Println(line) } fmt.Println("文件读完了") break } if err != nil { fmt.Println("read file failed, err:", err) return } fmt.Print(line) } } // ioutil读取整个文件 func readFormFileByIoutil() { content, err := ioutil.ReadFile("./main.go") if err != nil { fmt.Println("read file failed, err:", err) return } fmt.Println(string(content)) } func main() { // readFormFile1() // readFormFilebyBufio() readFormFileByIoutil() }

文件写入操作

Write和WriteString

bufio.NewWriter

ioutil.WriteFile

package main import ( "bufio" "fmt" "io/ioutil" "os" ) // 打开文件写内容 func writeDemo1() { fileObj, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) if err != nil { fmt.Println("open file failed, err:", err) return } defer fileObj.Close() // write str := "吹尽狂沙始到金\n" fileObj.Write([]byte(str)) //写入字节切片数据 fileObj.WriteString("学而不思则罔") //直接写入字符串数据 } // bufio.NewWriter func writeDemo2() { fileObj, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) if err != nil { fmt.Println("open file failed, err:", err) return } defer fileObj.Close() // 创建一个写的对象 writer := bufio.NewWriter(fileObj) for i := 0; i < 10; i++ { writer.WriteString("天降大任于斯人也\n") //将数据先写入缓存 } writer.Flush() //将缓存中的内容写入文件 } // ioutil.WriteFile func writeDemo3() { str := "圣人以治天下为事者也,必知乱之所自起,焉能治之;不知乱之所自起,则不能治。" err := ioutil.WriteFile("./xx.txt", []byte(str), 0666) if err != nil { fmt.Println("write file failed, err:", err) return } } func main() { // writeDemo1() // writeDemo2() writeDemo3() }

二进制实用途

package main import "fmt" // 二进制实用途 const ( eat int = 4 sleep int = 2 da int = 1 ) // 111 // 左边的1表示吃饭 100 // 中间的1表示睡觉 010 // 右边的1表示打豆豆 001 func f(arg int) { fmt.Printf("%b\n", arg) } func main() { f(eat | da) // 101 f(eat | sleep | da) // 111 }

获取用户输入时如果有空格的处理

package main import ( "bufio" "fmt" "os" ) // 获取用户输入时如果有空格 func useScan() { var s string fmt.Print("请输入内容:") fmt.Scanln(&s) fmt.Printf("您输入的内容是:%s\n", s) } func useBufio() { var s string reader := bufio.NewReader(os.Stdin) // NewReader的参数就是接口类型 fmt.Print("请输入内容:") s, _ = reader.ReadString('\n') fmt.Printf("您输入的内容是:%s\n", s) } func main() { // useScan() useBufio() }