Apabila bekerja dengan fail teks dalam Go, adalah penting untuk memahami cara membaca kandungannya. Walau bagaimanapun, soalan yang anda kemukakan, "Bagaimana hendak membaca fail teks? [pendua]," menunjukkan bahawa tugasan ini mungkin lebih kompleks daripada yang kelihatan.
Kod yang anda berikan:
package main import ( "fmt" "os" "log" ) func main() { file, err := os.Open("file.txt") if err != nil { log.Fatal(err) } fmt.Print(file) }
berjaya membaca fail, tetapi output hanyalah nilai penunjuk bagi deskriptor fail (*os.File). Untuk benar-benar mendapatkan kandungan fail, anda perlu menggunakan salah satu daripada beberapa teknik:
Untuk fail kecil, pendekatan paling mudah ialah menggunakan io/ioutil.ReadAll untuk memuatkan keseluruhan fail ke dalam ingatan.
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) }
Untuk fail yang lebih besar, baca dalam ketulan boleh menjadi lebih cekap ingatan.
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 } } }
Akhir sekali, anda boleh menggunakan pakej bufio untuk mencipta Pengimbas yang membaca fail dalam token, memajukan berdasarkan pemisah (secara lalai, baris baharu).
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()) } }
Atas ialah kandungan terperinci Bagaimana untuk Membaca Kandungan Fail Teks dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!