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

Tutorial básico Golang

Controle de语句 Golang

Função & Método Golang

Estrutura Golang

Fatia & Array Golang

Cadeia de caracteres (String) Golang

Ponteiro Golang

Interface Golang

Concorrência Golang

Erro Golang

Outros itens Golang

Parâmetros de função do Go Linguagem

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.

Chamada por valor

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

00 and s =

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