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