Go - Call by value
o call by valueO método de passar argumentos para uma função copia o valor real de um argumento para o parâmetro formal da função. Nesse caso, as alterações feitas no parâmetro dentro da função não afetam o argumento.
Por padrão, a linguagem de programação Go usa o método chamada por valor para passar argumentos. Em geral, isso significa que o código dentro de uma função não pode alterar os argumentos usados para chamar a função. Considere a funçãoswap() definição como segue.
/* function definition to swap the values */
func swap(int x, int y) int {
var temp int
temp = x /* save the value of x */
x = y /* put y into x */
y = temp /* put temp into y */
return temp;
}
Agora, vamos chamar a função swap() passando valores reais como no exemplo a seguir -
package main
import "fmt"
func main() {
/* local variable definition */
var a int = 100
var b int = 200
fmt.Printf("Before swap, value of a : %d\n", a )
fmt.Printf("Before swap, value of b : %d\n", b )
/* calling a function to swap the values */
swap(a, b)
fmt.Printf("After swap, value of a : %d\n", a )
fmt.Printf("After swap, value of b : %d\n", b )
}
func swap(x, y int) int {
var temp int
temp = x /* save the value of x */
x = y /* put y into x */
y = temp /* put temp into y */
return temp;
}
Coloque o código acima em um único arquivo C, compile e execute-o. Isso produzirá o seguinte resultado -
Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :100
After swap, value of b :200
Isso mostra que não há alteração nos valores, embora eles tenham sido alterados dentro da função.