Golang文件操作核心是os和io包,通过os.Open、os.Create打开或创建文件,利用io.Reader和io.Writer接口读写数据,结合bufio提高效率,使用filepath处理路径,os.Stat判断文件是否存在,os.MkdirAll创建多级目录,os.Chmod修改权限,需始终正确处理错误并用defer file.Close()释放资源。

Golang文件操作,核心在于
os
os.Open
os.Create
io.Reader
io.Writer
os.Stat
os.MkdirAll
解决方案
Golang的文件操作涉及文件的打开、读取、写入、关闭以及目录的创建、删除等。核心在于理解
os
io
打开和关闭文件
立即学习“go语言免费学习笔记(深入)”;
os.Open(name string) (*os.File, error)
os.Create(name string) (*os.File, error)
os.OpenFile(name string, flag int, perm os.FileMode) (*os.File, error)
file.Close() error
defer file.Close()
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
fmt.Println("File opened successfully!")
}读取文件
io.Reader
os.File
io.Reader
Read(p []byte) (n int, err error)
p
bufio.NewReader(io.Reader) *bufio.Reader
ReadLine()
ioutil.ReadFile(filename string) ([]byte, error)
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n')
fmt.Print(line)
if err != nil {
break // 遇到EOF或其他错误
}
}
}写入文件
io.Writer
os.File
io.Writer
Write(p []byte) (n int, err error)
p
bufio.NewWriter(io.Writer) *bufio.Writer
ioutil.WriteFile(filename string, data []byte, perm os.FileMode) error
fmt.Fprintf(io.Writer, format string, a ...interface{}) (n int, err error)package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Create("output.txt")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer file.Close()
_, err = fmt.Fprintln(file, "Hello, world!")
if err != nil {
fmt.Println("Error writing to file:", err)
return
}
fmt.Println("Data written to file successfully!")
}文件路径处理
path/filepath
filepath.Join(elem ...string) string
filepath.Abs(path string) (string, error)
filepath.Dir(path string) string
filepath.Base(path string) string
filepath.Ext(path string) string
os.Mkdir(name string, perm os.FileMode) error
os.MkdirAll(path string, perm os.FileMode) error
os.Remove(name string) error
os.RemoveAll(path string) error
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
path := "data/test.txt"
absPath, err := filepath.Abs(path)
if err != nil {
fmt.Println("Error getting absolute path:", err)
return
}
fmt.Println("Absolute path:", absPath)
dir := filepath.Dir(absPath)
fmt.Println("Directory:", dir)
base := filepath.Base(absPath)
fmt.Println("Base name:", base)
ext := filepath.Ext(absPath)
fmt.Println("Extension:", ext)
err = os.MkdirAll("data", 0755) // 创建目录,权限为0755
if err != nil {
fmt.Println("Error creating directory:", err)
return
}
}错误处理
文件操作中错误处理至关重要。 始终检查函数返回的
error
errors.Is(err, os.ErrNotExist)
Golang如何高效读取大文件?
读取大文件时,一次性加载到内存中显然不现实。 推荐使用
bufio.Reader
ReadString
ReadLine
Read
mmap
如何在Golang中判断文件或目录是否存在?
使用
os.Stat(name string) (os.FileInfo, error)
error
os.ErrNotExist
os.IsNotExist(err error)
package main
import (
"fmt"
"os"
)
func main() {
_, err := os.Stat("example.txt")
if err != nil {
if os.IsNotExist(err) {
fmt.Println("File does not exist")
} else {
fmt.Println("Error:", err)
}
return
}
fmt.Println("File exists")
}Golang文件权限管理:如何设置和修改文件权限?
创建文件或目录时,可以通过
os.Create
os.Mkdir
os.MkdirAll
perm os.FileMode
0644
修改文件权限可以使用
os.Chmod(name string, mode os.FileMode) error
package main
import (
"fmt"
"os"
)
func main() {
err := os.Chmod("example.txt", 0777) // 设置权限为所有用户可读写执行
if err != nil {
fmt.Println("Error changing file permissions:", err)
return
}
fmt.Println("File permissions changed successfully!")
}权限设置需要谨慎,确保安全性。
以上就是Golang文件操作指南 读写与路径处理的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号