This commit is contained in:
badkaktus 2019-10-08 22:20:58 +03:00
parent 381b1303da
commit 26bd47a251
2 changed files with 17 additions and 16 deletions

View File

@ -1,7 +1,8 @@
// _Defer_ is used to ensure that a function call is // _Defer_ используется, чтобы гарантировать, что
// performed later in a program's execution, usually for // вызов функции будет выполнен позже при выполнении
// purposes of cleanup. `defer` is often used where e.g. // программы, обычно для целей очистки. `defer` часто
// `ensure` and `finally` would be used in other languages. // используется там, где в других языках используются
// `ensure` и `finally`.
package main package main
@ -10,16 +11,16 @@ import (
"os" "os"
) )
// Suppose we wanted to create a file, write to it, // Предположим, мы хотим создать файл, записать в него,
// and then close when we're done. Here's how we could // а затем закрыть, когда закончим. Вот как нам поможет
// do that with `defer`. // `defer`.
func main() { func main() {
// Immediately after getting a file object with // Сразу же после получения объекта файла с помощью
// `createFile`, we defer the closing of that file // `createFile` мы откладываем закрытие этого файла
// with `closeFile`. This will be executed at the end // с помощью `closeFile`. Она будет выполнена в
// of the enclosing function (`main`), after // конце включающей функции (`main`) после завершения
// `writeFile` has finished. // `writeFile`.
f := createFile("/tmp/defer.txt") f := createFile("/tmp/defer.txt")
defer closeFile(f) defer closeFile(f)
writeFile(f) writeFile(f)
@ -43,8 +44,8 @@ func writeFile(f *os.File) {
func closeFile(f *os.File) { func closeFile(f *os.File) {
fmt.Println("closing") fmt.Println("closing")
err := f.Close() err := f.Close()
// It's important to check for errors when closing a // Важно проверять наличие ошибок при закрытии файла,
// file, even in a deferred function. // даже в отложенной функции.
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err) fmt.Fprintf(os.Stderr, "error: %v\n", err)
os.Exit(1) os.Exit(1)

View File

@ -1,5 +1,5 @@
# Running the program confirms that the file is closed # Запуск программы подтверждает, что файл закрыт
# after being written. # после записи.
$ go run defer.go $ go run defer.go
creating creating
writing writing