Reading Data from a Temporary File in Go After Writing
In Go, using ioutil.TempFile to create a temporary file allows for writing to the file. However, subsequently reading data from the file can encounter challenges, as the file pointer is moved to the end of the file when writing.
To address this, the solution involves resetting the file pointer to the beginning of the file after writing, enabling data reading. This can be achieved using the Seek method of the *os.File type. Additionally, it is recommended to close the file using defer to ensure proper release of resources.
Here is an example that demonstrates the correct implementation:
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) } }
By incorporating these modifications, the program can reliably read data from the temporary file after writing to it.
The above is the detailed content of How to Read Data from a Temporary File in Go After Writing?. For more information, please follow other related articles on the PHP Chinese website!