I don't think so. Closing file without flushing:
package main import ( "bufio" "fmt" "io" "os" ) func main() { sourceFilename := "MozillaFirefox-66.0.5-741.4.x86_64.rpm" sourcef, err := os.Open(sourceFilename) if err != nil { fmt.Println("Error while opening source file:", err) return } defer sourcef.Close() destinationFilename := "CopiedMozillaFirefox-66.0.5-741.4.x86_64.rpm" os.Create(destinationFilename) destf, err := os.OpenFile(destinationFilename, os.O_APPEND|os.O_WRONLY, os.ModeAppend) if err != nil { fmt.Println("Error while opening destination file:", err) return } defer func() { fmt.Println("Closing file.") destf.Close() }() fReader := bufio.NewReader(sourcef) fWriter := bufio.NewWriter(destf) n, err := io.Copy(fWriter, fReader) if err != nil { fmt.Println("Error while copying:", err) return } fmt.Println("Copied", n, "bytes.") } Output: ➜ throttle-and-resume-download go run copyTest.go Copied 46061104 bytes. Closing file. ➜ throttle-and-resume-download diff MozillaFirefox-66.0.5-741.4.x86_64.rpm CopiedMozillaFirefox-66.0.5-741.4.x86_64.rpm Binary files MozillaFirefox-66.0.5-741.4.x86_64.rpm and CopiedMozillaFirefox-66.0.5-741.4.x86_64.rpm differ When I flush: package main import ( "bufio" "fmt" "io" "os" ) func main() { sourceFilename := "MozillaFirefox-66.0.5-741.4.x86_64.rpm" sourcef, err := os.Open(sourceFilename) if err != nil { fmt.Println("Error while opening source file:", err) return } defer sourcef.Close() destinationFilename := "CopiedMozillaFirefox-66.0.5-741.4.x86_64.rpm" os.Create(destinationFilename) destf, err := os.OpenFile(destinationFilename, os.O_APPEND|os.O_WRONLY, os.ModeAppend) if err != nil { fmt.Println("Error while opening destination file:", err) return } defer func() { fmt.Println("Closing file.") destf.Close() }() fReader := bufio.NewReader(sourcef) fWriter := bufio.NewWriter(destf) n, err := io.Copy(fWriter, fReader) if err != nil { fmt.Println("Error while copying:", err) return } // Flush writer to ensure all contents are written to file err = fWriter.Flush() if err != nil { fmt.Println("Error while flushing writer:", err) return } else { fmt.Println("Flushed writer.") } fmt.Println("Copied", n, "bytes.") } Output: ➜ throttle-and-resume-download go run copyTest.go Flushed writer. Copied 46061104 bytes. Closing file. ➜ throttle-and-resume-download diff MozillaFirefox-66.0.5-741.4.x86_64.rpm CopiedMozillaFirefox-66.0.5-741.4.x86_64.rpm ➜ throttle-and-resume-download On Tuesday, May 21, 2019 at 6:39:08 PM UTC+5:30, Robert Engels wrote: > > You do not need to flush if you call close. Close will flush. There is > some other bug in your code I believe. > > > On May 21, 2019, at 3:01 AM, Jan Mercl <0xj...@gmail.com <javascript:>> > wrote: > > > >> On Tue, May 21, 2019 at 9:44 AM <pierr...@gmail.com <javascript:>> > wrote: > >> > >> Usually though, you do not need to buffer the input or output at all. > > > > If I/O is performed in chunks comparable in size to what > > bufio.{Reader,Writer} uses then ok. When I/O is done in small chunks, > > then using bufio should improve performance. > > > > The question left is what the "usual" scenario is. > > > > -- > > You received this message because you are subscribed to the Google > Groups "golang-nuts" group. > > To unsubscribe from this group and stop receiving emails from it, send > an email to golan...@googlegroups.com <javascript:>. > > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CAA40n-WsWkLtnP19DUwHNSrjDNBncbVepqNxVj%3DUF6MFV8ARLA%40mail.gmail.com. > > > > For more options, visit https://groups.google.com/d/optout. > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/97499dad-3a11-4e47-a31c-6f5ed6b08810%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.