Go에서 동일한 파일 읽기 및 쓰기
Go에서 os.File 유형을 사용하면 파일 작업이 간단해집니다. 그러나 동일한 파일 포인터를 읽고 쓰려고 하면 문제가 발생할 수 있습니다. 이 문서에서는 이러한 시나리오를 다루고 솔루션을 제공합니다.
문제:
파일에 데이터를 쓴 다음 동일한 파일에서 다시 읽으려고 합니다. 바늘. 그러나 읽기 작업은 아무것도 반환하지 않습니다.
코드:
func main() { filename := "test.txt" f, _ := os.OpenFile(filename, os.O_CREATE|os.O_TRUNC|os.O_RDWR, os.ModePerm) defer os.Remove(filename) // Write 10 times for i := 0; i < 10; i++ { fmt.Fprintf(f, "test%d\n", i) } // Read 10 times r := bufio.NewReader(f) for i := 0; i < 10; i++ { str, _, err := r.ReadLine() if err != nil { if err == io.EOF { fmt.Println("Done") return } fmt.Println("Error", err) } fmt.Println("Read", string(str)) } }
문제:
제공된 코드에서, 파일 포인터는 쓰기 작업 후에 파일 끝으로 이동됩니다. 읽기 작업을 시도하면 즉시 파일 끝을 만나 io.EOF 오류가 발생합니다.
해결책:
이 문제를 해결하려면 파일 포인터를 읽기 전에 수동으로 처음부터 다시 찾아야 합니다.
_, err := f.Seek(0, 0) if err != nil { fmt.Println("Error", err) }
이 코드 조각은 Seek 작업을 추가합니다. 읽기 루프 전에. 파일 포인터를 파일의 시작 부분으로 설정하여 후속 읽기 작업에서 기록된 데이터를 검색할 수 있도록 합니다.
위 내용은 동일한 Go 파일 포인터에 쓴 후 읽으면 아무것도 반환되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!