在 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中文網其他相關文章!