网站首页 > 基础教程 正文
在本章中,我们将深入探讨 Go 编程语言中的文件处理和 I/O(输入/输出)操作。 文件是存储和检索数据的基本方式,了解如何读取和写入文件对于构建广泛的应用程序至关重要。 我们将探索文件打开、读取、写入等。
10.1 打开和关闭文件
Go提供了打开和关闭文件的函数,使您能够对文件数据执行各种操作。
**打开文件:**
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
// File operations...
}
10.2 读取文件
您可以使用各种技术从文件中读取数据,例如读取字节片、读取行或使用缓冲读取器。
**读取字节片:**
package main
import (
"fmt"
"io/ioutil"
)
func main() {
data, err := ioutil.ReadFile("example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("File Content:")
fmt.Println(string(data))
}
**用扫描仪读取行:**
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println("Line:", scanner.Text())
}
if err := scanner.Err(); err != nil {
fmt.Println("Error:", err)
}
}
10.3 写入文件
您可以使用“os.Create()”和“ioutil.WriteFile()”等函数将数据写入文件。
**写入数据:**
package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
content := []byte("Hello, Go!")
// Using ioutil.WriteFile
err := ioutil.WriteFile("output.txt", content, 0644)
if err != nil {
fmt.Println("Error:", err)
return
}
// Using os.Create and file.WriteString
file, err := os.Create("output2.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
_, err = file.WriteString("Hello again, Go!")
if err != nil {
fmt.Println("Error:", err)
}
}
10.4 缓冲I/O
缓冲 I/O 通过减少读取或写入数据时的系统调用次数来提高性能。
**使用缓冲读取器和写入器:**
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n')
if err != nil {
break
}
fmt.Print("Line:", line)
}
}
10.5 文件 I/O 最佳实践
- 文件操作后始终检查错误。
- 使用“defer”推迟文件的关闭。
- 使用缓冲 I/O 来提高性能。
- 适当指定文件权限。
- 读取文件时处理不同的行结尾。
- 避免一次将大文件读入内存。
文件处理和 I/O 操作是任何程序员的基本技能。 通过了解如何打开、读取和写入文件,您可以处理各种类型的数据并构建与文件系统交互的应用程序。 在下一章中,我们将探索 Go 中的网络编程,允许您创建通过网络进行通信的应用程序。 继续努力!
猜你喜欢
- 2024-11-26 golang defer、panic、recover实践
- 2024-11-26 go-fastdfs文件上传
- 2024-11-26 OpenHarmony3.0在树莓派3B上的烧录与通讯
- 2024-11-26 go|bytes.buffer
- 2024-11-26 AOVX资产跟踪产品测试工具mPower1203如何使用python对接 (二)
- 2024-11-26 Python os.dup2() 方法是什么?os.du
- 2024-11-26 go中关于文件和json操作的知识点小结
- 2024-11-26 python3从零学习-5.8.4、mmap—内存映射文件支持
- 2024-11-26 29.Python 读取文件的六种方式
- 2024-11-26 macOS安装并设置五笔输入法
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)