English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
funçãoNo Golang, é um conjunto de instruções para executar uma tarefa específica e retornar um valor ao chamador. A função também pode executar tarefas específicas sem retornar nenhum conteúdo. O Golang suporta dois modos de passar parâmetros para função, ou seja:Passagem por valor ou chamada por valorePassagem por referência ou chamada por referência.Pelo padrão, o Golang usa o modo de chamada por valor para passar parâmetros para função.
Términos básicos de passagem de parâmetros para função:
Os parâmetros passados para a função são chamados de parâmetros reais.
Os parâmetros recebidos pela função são chamados de parâmetros formais.
Nesta passagem de parâmetro, o valor do parâmetro real é copiado para o parâmetro formal da função e os dois tipos de parâmetros são armazenados em diferentes locais de armazenamento. Portanto, qualquer alteração feita dentro da função não será refletida no parâmetro real do chamador.
Exemplo1:No programa a seguir, você pode ver que o valor de Z não pode ser modificado pelo função ModifyModificação.
package main import "fmt" // Modificação de valor func modify(Z int) { Z = 70 } func main() { var Z int = 10 fmt.Printf("Antes da chamada da função, o valor de Z é = %d", Z) //Chamada por valor modify(Z) fmt.Printf("\nApós a chamada da função, o valor de Z é = %d", Z) }
Saída:
Antes da chamada da função, o valor de Z é = 10 函数调用后,Z的值为 = 10
Exemplo2:Após a chamada da função, o valor de Z é =
package main import "fmt" //No programa abaixo, a função de troca não consegue trocar valores porque estamos usando chamada por valor. Função de troca de valores //func swap(x, y int) int { var tmp int Tirar uma variável temporária tmp = x y = tmp return tmp } func main() { var f int = 700 var s int = 900 fmt.Printf("O valor antes da chamada da função\n") x = y fmt.Printf("f = %d and s = %d\n", f, s) fmt.Printf("\nO valor após a chamada da função\n") swap(f, s) }
Saída:
O valor antes da chamada da função f = 7fmt.Printf("f = %d and s = %d", f, s) 900 A função chamada retorna f = 7fmt.Printf("f = %d and s = %d", f, s) 900
chamada por referênciaAqui, você usaráPointers (Ponteiros)*do conceito. O operador de desreferência
Exemplo1:para acessar o valor no endereço. O operador de endereço & é usado para obter o endereço de qualquer tipo de variável. Os parâmetros reais e os parâmetros formais apontam para o mesmo local, portanto, qualquer alteração feita dentro da função refletirá no parâmetro real do chamador.*A modificação de valores. Portanto, dentro da função, passamos o endereço da variável e usamos o operador de desreferênciaModificação apósVocê encontrará o valor atualizado após a modificação.
package main import "fmt" // Função de modificação de valores func modifydata(Z *) { *Z = 70 } func main() { var Zz int = 10 fmt.Printf("Antes da chamada da função, o valor de Zz é = %d", Zz) //Passagem de endereço da variável Z por referência modifydata(&Zz) fmt.Printf("\nApós a chamada da função, o valor de Zz é = %d", Zz) }
Saída:
Antes da chamada da função, o valor de Zz é = 10 Após a chamada da função, o valor de Zz é = 70
Exemplo2:Ao usar chamada por referência, a função de troca será capaz de trocar valores, conforme mostrado a seguir.
package main import "fmt" //Função de troca de valores, apontando para inteiros func swap(x, y *) int { //Armazenamento temporário de variável var tmp int tmp = *x *x = *y *y = tmp return tmp } func main() { var f int = 700 var s int = 900 fmt.Printf("O valor antes da chamada da função\n") fmt.Printf("f = %d e s = %d\n", f, s) //Chamada por referência //Passagem de endereço de variável swap(&f, &s) fmt.Printf("\nO valor após a chamada da função\n") fmt.Printf("f = %d e s = %d", f, s) }
Saída:
O valor antes da chamada da função f = 700 e s = 900 A função chamada retorna f = 900 e s = 700