История изменений
Исправление beastie, (текущая версия) :
Где там это написано? Там совсем о другом. В частности:
Плохо:
a, err := os.Open(A)
if err != nil { return } // закрывать нечего, а не открыт
b, err := os.Open(B)
if err != nil { return } // на этом этапе a останется открытым, b не открыт
defer a.Close()
defer b.Close()
// ...
return // закрой a и b
vs. хорошо:
a, err := os.Open(A)
if err != nil { return } // закрывать нечего, а не открыт
defer a.Close()
b, err := os.Open(B)
if err != nil { return } // закрой a, b не октрыт
defer b.Close()
// ...
return // закрой a и b
Исправление beastie, :
Где там это написано? Там совсем о другом. В частности:
Плохо:
a, err := os.Open(A)
if err != nil { return } // закрывать нечего, а не открыт
b, err := os.Open(B)
if err != nil { return } // на этом этапе a останется открытым, b не открыт
defer a.Close()
defer b.Close()
return // закрой a и b
vs. хорошо:
a, err := os.Open(A)
if err != nil { return } // закрывать нечего, а не открыт
defer a.Close()
b, err := os.Open(B)
if err != nil { return } // закрой a, b не октрыт
defer b.Close()
return // закрой a и b
Исходная версия beastie, :
Где там это написано? Там совсем о другом. В частности:
Плохо:
a, err := os.Open(A)
if err != nil { return } // закрывать нечего
b, err := os.Open(B)
if err != nil { return } // на этом этапе a останется открытым
defer a.Close()
defer b.Close()
return // закрой a и b
vs. хорошо:
a, err := os.Open(A)
if err != nil { return } // закрывать нечего
defer a.Close()
b, err := os.Open(B)
if err != nil { return } // закрой a
defer b.Close()
return // закрой a и b