Membaca Data Ditulis pada Fail Temp dalam Go
Dalam Go, mencipta dan membaca daripada fail sementara boleh menimbulkan cabaran. Pertimbangkan kod ujian ringkas berikut:
package main import ( "bufio" "fmt" "io/ioutil" "log" "os" "path/filepath" ) func main() { tmpFile, err := ioutil.TempFile("", fmt.Sprintf("%s-", filepath.Base(os.Args[0]))) if err != nil { log.Fatal("Could not create temporary file", err) } fmt.Println("Created temp file:", tmpFile.Name()) defer tmpFile.Close() fmt.Println("Writing some data to the temp file") if _, err = tmpFile.WriteString("test data"); err != nil { log.Fatal("Unable to write to temporary file", err) } else { fmt.Println("Data should have been written") } fmt.Println("Trying to read the temp file now") s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) } err = s.Err() if err != nil { log.Fatal("error reading temp file", err) } }
Semasa kod mencipta dan menulis dengan betul pada fail temp, cuba membaca hasil dalam output kosong. Ini kerana operasi tulis mengalihkan penunjuk ke hujung fail. Untuk membaca data, kita perlu mencari kembali ke permulaan.
Penyelesaian:
Untuk menyelesaikan isu ini, tambah tmpFile.Seek(0, 0) untuk memindahkan penuding kembali ke permulaan fail sebelum cuba membaca:
tmpFile.Seek(0, 0) s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) }
Dengan pengubahsuaian ini, kod membaca dan mencetak data dengan betul. Ingat untuk menutup fail menggunakan defer tmpFile.Close() sebelum keluar untuk memastikan pengurusan sumber yang betul.
Atas ialah kandungan terperinci Bagaimana untuk Membaca Data yang Ditulis ke Fail Temp dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!