Menyelesaikan Isu Baca dalam Pengendalian Fail Sementara Go
Dalam Go, mengakses data daripada fail sementara serta-merta selepas menulis kepadanya boleh menjadi tersandung blok. Berikut ialah pecahan terperinci masalah dan penyelesaiannya:
Masalahnya:
ioutil.TempFile Go mencipta fail sementara, membukanya untuk membaca dan menulis. Walaupun data boleh berjaya ditulis ke fail ini, operasi baca seterusnya gagal. Ini kerana deskriptor fail menghala ke penghujung fail selepas menulis.
Penyelesaian:
Untuk membetulkan isu ini, deskriptor fail mesti dialihkan semula ke permulaan fail sebelum cuba membacanya. Ini boleh dicapai menggunakan kaedah Seek *os.File. Dengan menambahkan tmpFile.Seek(0, 0) sebelum operasi baca, penuding fail ditetapkan semula kepada permulaan fail.
Contoh Kod:
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) } defer tmpFile.Close() fmt.Println("Created temp file: ", tmpFile.Name()) 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") // Seek the pointer to the beginning tmpFile.Seek(0, 0) s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) } if err = s.Err(); err != nil { log.Fatal("error reading temp file", err) } }
Pertimbangan Tambahan:
Atas ialah kandungan terperinci Mengapa Membaca Dari Fail Sementara Go Gagal Sejurus Selepas Menulis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!