Deferring unsafe method "Close" on type "io.ReadCloser"
458 return baggageclaim.VolumeResponse{}, false, err
459 }
460
461 defer response.Body.Close()462
463 if response.StatusCode != http.StatusOK {
464 if response.StatusCode == http.StatusNotFound {
Deferring unsafe method "Close" on type "io.ReadCloser"
494 return err
495 }
496
497 defer response.Body.Close()498
499 if response.StatusCode != 204 {
500 return getError(response)
Deferring unsafe method "Close" on type "io.ReadCloser"
516 return false, err
517 }
518
519 defer response.Body.Close()520
521 if response.StatusCode != 200 {
522 return false, getError(response)
Deferring unsafe method "Close" on type "io.ReadCloser"
551 return err
552 }
553
554 defer response.Body.Close()555
556 if response.StatusCode != 204 {
557 return getError(response)
Deferring unsafe method "Close" on type "io.ReadCloser"
579 return err
580 }
581
582 defer response.Body.Close()583
584 if response.StatusCode != 204 {
585 return getError(response)
Deferring unsafe method "Close" on type "io.ReadCloser"
99 if err != nil {
100 return nil, err
101 }
102 defer response.Body.Close()103
104 if response.StatusCode != http.StatusCreated {
105 return nil, getError(response)
Deferring unsafe method "Close" on type "io.ReadCloser"
152 return nil, err
153 }
154
155 defer response.Body.Close()156
157 if response.StatusCode != 200 {
158 return nil, getError(response)
Deferring unsafe method "Close" on type "io.ReadCloser"
220 return err
221 }
222
223 defer response.Body.Close()224
225 if response.StatusCode != http.StatusNoContent {
226 lagerctx.FromContext(ctx).Info("failed-volumes-deletion", lager.Data{"status": response.StatusCode})
Deferring unsafe method "Close" on type "io.ReadCloser"
242 return err
243 }
244
245 defer response.Body.Close()246
247 if response.StatusCode != http.StatusNoContent {
248 lagerctx.FromContext(ctx).Info("failed-volume-deletion", lager.Data{"status": response.StatusCode})
Deferring unsafe method "Close" on type "io.ReadCloser"
285 return err
286 }
287
288 defer response.Body.Close()289 if response.StatusCode == http.StatusNoContent {
290 return nil
291 }
Deferring unsafe method "Close" on type "io.ReadCloser"
303 if err != nil {
304 return "", err
305 }
306 defer response.Body.Close()307
308 if response.StatusCode != http.StatusOK {
309 err := fmt.Errorf("failed to get p2p url: %d", response.StatusCode)
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()
}