文章目录
一、文件操作 📂
(一)文件读取与写入 🌟
在 Go 语言中,文件操作是常见的开发任务,以下是一些实用的操作技巧:
-
使用
os.Open和os.Create打开和创建文件:file, err := os.Open("example.txt") if err!= nil { log.Fatal(err) } defer file.Close()这里使用
os.Open打开文件,同时使用defer关键字确保文件在操作完成后关闭,避免资源泄漏。 -
利用
ioutil.ReadAll快速读取文件的全部内容:content, err := ioutil.ReadAll(file) if err!= nil { log.Fatal(err) }此方法能方便地将文件内容读取到一个字节切片中。
-
对于大文件,可以使用
bufio.Scanner逐行读取:scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) }这种方式避免了一次性加载整个文件到内存,适用于大文件处理。
-
用
os.WriteFile简单地将数据写入文件:data := []byte("Hello, World!") err := os.WriteFile("output.txt", data, 0644) if err!= nil { log.Fatal(err) }
(二)文件路径操作 🌐
文件路径的处理在文件操作中至关重要,path/filepath 包提供了强大的功能:
-
filepath.Join可以正确拼接路径:path := filepath.Join("dir", "subdir", "file.txt")它会根据操作系统自动选择正确的路径分隔符,确保跨平台的兼容性。
-
使用
filepath.Abs获取文件的绝对路径:absPath, err := filepath.Abs("relative/path") if err!= nil { log.Fatal(err) }
(三)文件信息获取 📋
我们经常需要获取文件的各种信息,os.Stat 是一个得力工具:
os.Stat可以获取文件的信息,如文件大小、权限、是否为目录等:fileInfo, err := os.Stat("example.txt") if err!= nil { log.Fatal(err) } fmt.Println(fileInfo.Size()) fmt.Println(fileInfo.IsDir())
(四)目录操作 🗂️
目录的创建、删除和管理是文件系统操作的重要部分:
-
使用
os.Mkdir和os.MkdirAll创建目录,os.MkdirAll可递归创建目录:err := os.Mkdir("newdir", 0755) if err!= nil { log.Fatal(err) } err = os.MkdirAll("parent/child/grandchild", 0755) if err!= nil { log.Fatal(err) } -
os.Remove和os.RemoveAll用于删除文件和目录,os.RemoveAll可以递归删除目录:err := os.Remove("file.txt") if err!= nil { log.Fatal(err) } err = os.RemoveAll("parent") if err!= nil { log.Fatal(err) }
二、并发与并行处理 ⚙️
(一)Goroutines 并发 🌠
Goroutines 是 Go 语言并发的核心,以下是其使用示例:
-
启动 Goroutines 进行并发操作:
func printMessage(msg string) { fmt.Println(msg) } go printMessage("Hello from goroutine 1") go printMessage("Hello from goroutine 2")简单的
go关键字就能启动一个 Goroutine。 -
使用
sync.WaitGroup来等待多个 Goroutines 完成任务:var wg sync.WaitGroup wg.Add(2) go func() { defer wg.Done() printMessage("Task 1") }() go func() { defer wg.Done() printMessage("Task 2") }() wg.Wait()它能帮助我们更好地控制 Goroutines 的同步。
(二)Channels 通信 📡
Channels 是 Goroutines 之间通信的重要方式:
-
通过 Channels 进行 Goroutines 间的数据通信,可用于数据传递和同步:
ch := make(chan int) go func() { ch <- 42 }() value := <-ch fmt.Println(value) -
使用
buffered channels减少阻塞,提高性能:bufferedCh := make(chan int, 10) bufferedCh <- 1 bufferedCh <- 2 value := <-bufferedCh fmt.Println(value


543

被折叠的 条评论
为什么被折叠?



