defer
This commit is contained in:
parent
381b1303da
commit
26bd47a251
@ -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)
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user