English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 基础教程

Golang 控制语句

Golang 函数 & 方法

Golang 结构体

Golang 切片 & 数组

Golang 字符串(String)

Golang 指针

Golang 接口

Golang 并发

Golang 异常(Error)

Golang 其他杂项

Palavra-chave Defer Go

在Go语言中,defer语句会延迟Função或方法或匿名方法的执行,直到附近的函数返回为止。换句话说,延迟函数或方法调用参数会立即求值,但是它们会执行到附近的函数返回为止。您可以使用defer关键字创建延迟的方法,函数或匿名函数。

语法:

// Função
defer func func_name(parameter_list Type) return_type{
    // Código
}
// Método
defer func (receptor Tipo) nome_do_método (lista_de_parâmetros){
    // Código
}
defer func (lista_de_parâmetros)(tipo_de_retorno){
    // Código
})

Notas:

  • No Go, vários comandos defer podem estar no mesmo programa e eles são executados em ordem LIFO (último a entrar, primeiro a sair), como no exemplo2Mostrado.

  • Nos comandos defer, os parâmetros serão avaliados no momento da execução do comando defer (não no momento da chamada deles).

  • As instruções defer geralmente são usadas para garantir que arquivos sejam fechados após a conclusão do arquivo, canais sejam fechados ou emergências sejam capturadas no programa.

Vamos usar exemplos para discutir esse conceito:

Exemplo1:

package main
import "fmt"
// Função
func mul(a1, a2 int) int {
    res := a1 * a2
    fmt.Println("Resultado: ", res)
    return 0
}
func show() {
    fmt.Println("Olá!, pt.oldtoolbag.com Aula Básica de Linguagem Go")
}
func main() {
    //Chamar a função mul()
    //Aqui o comportamento da função mul()
    //Como uma função normal
    mul(23, 45)
    //Chamar a função mul()
    //Usando a palavra-chave defer
    //Aqui está a função mul()
    //É uma função defer
    defer mul(23, 56)
    //Chamar a função show()
    show()
}

Saída:

Resultado:  1035
Olá!, pt.oldtoolbag.com Aula Básica de Linguagem Go
Resultado:  1288

Explicação de uso:No exemplo acima, temos dois nomesmul()eshow()Função dentro de uma função. Dentreshow()As funções geralmente são usadas emmain()Função dentro de uma função, enquanto chamamos de duas maneiras diferentesmul()Função:

  • Primeiro, chamamos a função como uma função convencionalmulA função, ou seja, mul(23,45) e executar ao chamar a função (Saída: Resultado:1035)。

  • Em segundo lugar, usamos a palavra-chave defer para chamarmul()A função é chamada de função defer, ou seja, defer mul( 23,56),ao retornar todos os métodos ao redor, ele será executado (Saída: Resultado:1288)。

Exemplo2:

package main 
  
import "fmt"
  
// Função
func add(a1, a2 int) int { 
    res := a1 + a2 
    fmt.Println("Resultado: ", res) 
    return 0 
} 
  
func main() { 
  
    fmt.Println("Start") 
  
    //Múltiplas instruções defer
    //Execução em ordem LIFO
    defer fmt.Println("Fim") 
    defer add(34, 56) 
    defer add(10, 10) 
}

Saída:

Start
Resultado:  20
Resultado:  90
Fim