Deferring unsafe method "Close" on type "*os.File"
30 if err != nil {
31 return err
32 }
33 defer file.Close()34 err = file.Chmod(os.FileMode(0o600))
35
36 if err != nil {
Deferring unsafe method "Close" on type "*os.File"
53 if err != nil {
54 return nil, err
55 }
56 defer file.Close()57
58 return io.ReadAll(file)
59}
Deferring unsafe method "Close" on type "*os.File"
53 if err != nil {
54 return nil, err
55 }
56 defer file.Close()57
58 return io.ReadAll(file)
59}
Deferring unsafe method "Close" on type "*os.File"
30 if err != nil {
31 return err
32 }
33 defer file.Close()34 err = file.Chmod(os.FileMode(0o600))
35
36 if err != nil {
Deferring unsafe method "Close" on type "io.ReadCloser"
35 if err != nil {
36 return nil, err
37 }
38 defer resp.Body.Close() 39 contents, err := io.ReadAll(resp.Body)
40 if err != nil {
41 return nil, err
Deferring unsafe method "Close" on type "io.ReadCloser"
136 if err != nil {
137 return nil, err
138 }
139 defer resp.Body.Close()140 contents, err := io.ReadAll(resp.Body)
141 if err != nil {
142 return nil, err
Deferring unsafe method "Close" on type "io.ReadCloser"
95 if err != nil {
96 return nil, err
97 }
98 defer resp.Body.Close() 99 contents, err := io.ReadAll(resp.Body)
100 if err != nil {
101 return nil, err
Deferring unsafe method "Close" on type "io.ReadCloser"
52 if err != nil {
53 return nil, err
54 }
55 defer resp.Body.Close() 56 if resp.StatusCode != http.StatusOK {
57 text, _ := io.ReadAll(resp.Body)
58
Deferring unsafe method "Close" on type "io.ReadCloser"
92 if err != nil {
93 return nil, err
94 }
95 defer resp.Body.Close() 96 contents, err := io.ReadAll(resp.Body)
97 if err != nil {
98 return nil, err
Description
Calling Close()
method may return an error, and ignoring the same
might result in a data loss. This is similar to many more Close
methods.
For example, on POSIX systems, os.Close
uses the close
system call underneath,
which may return an EIO
:
A previously-uncommitted write(2) encountered an input/output error.
This means that the data written by os.Write
hasn't been written to the disk,
which results in a data loss. It is recommended to handle the error returned
by the os.Close
call or call os.Sync
if available to force the OS to write
the data to the disk.
Bad practice
package main
import (
"fmt"
"os"
)
func foo() error {
f, err := os.Create("/tmp/test.txt")
if err != nil {
return err
}
defer f.Close()
return fmt.Fprint(f, "Hello World")
}
Recommended
package main
import (
"fmt"
"os"
)
func foo() error {
f, err := os.Create("/tmp/test.txt")
if err != nil {
return err
}
err = fmt.Fprint(f, "Hello World")
if err != nil {
return err
}
return f.Close()
}
package main
import (
"fmt"
"os"
)
func foo() error {
f, err := os.Create("/tmp/test.txt")
if err != nil {
return err
}
defer f.Close()
err = fmt.Fprint(f, "Hello World")
if err != nil {
return err
}
return f.Sync()
}