在 Go 中处理文本文件时,了解如何读取其内容至关重要。但是,您提出的问题“如何读取文本文件?[重复]”表明此任务可能比看起来更复杂。
您提供的代码:
package main import ( "fmt" "os" "log" ) func main() { file, err := os.Open("file.txt") if err != nil { log.Fatal(err) } fmt.Print(file) }
成功读取文件,但输出只是文件描述符(*os.File)的指针值。要实际获取文件内容,您需要采用以下几种技术之一:
对于小文件,最简单的方法是使用 io/ioutil.ReadAll 来加载将整个文件写入内存。
func main() { file, err := os.Open("file.txt") if err != nil { log.Fatal(err) } defer file.Close() b, err := io.ReadAll(file) fmt.Print(b) }
对于较大的文件,分块读取可以提高内存效率。
func main() { file, err := os.Open("file.txt") if err != nil { log.Fatal(err) } defer file.Close() buf := make([]byte, 32*1024) for { n, err := file.Read(buf) if n > 0 { fmt.Print(buf[:n]) } if err == io.EOF { break } if err != nil { log.Printf("read %d bytes: %v", n, err) break } } }
最后,您可以使用 bufio 包创建一个扫描仪,它以令牌的形式读取文件,并根据分隔符前进(默认情况下,换行)。
func main() { file, err := os.Open("file.txt") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) fmt.Println(scanner.Bytes()) } }
以上是如何在 Go 中读取文本文件的内容?的详细内容。更多信息请关注PHP中文网其他相关文章!