Go - Regras de Escopo
Um escopo em qualquer programação é uma região do programa onde uma variável definida pode existir e, além disso, a variável não pode ser acessada. Existem três lugares onde as variáveis podem ser declaradas na linguagem de programação Go -
Dentro de uma função ou bloco (local variáveis)
Fora de todas as funções (global variáveis)
Na definição dos parâmetros da função (formal parâmetros)
Vamos descobrir o que são local e global variáveis e quais são formal parâmetros.
Variáveis Locais
As variáveis que são declaradas dentro de uma função ou bloco são chamadas de variáveis locais. Eles podem ser usados apenas por instruções que estão dentro dessa função ou bloco de código. Variáveis locais não são conhecidas por funções fora das suas. O exemplo a seguir usa variáveis locais. Aqui, todas as variáveis a, b e c são locais para a função main ().
package main
import "fmt"
func main() {
/* local variable declaration */
var a, b, c int
/* actual initialization */
a = 10
b = 20
c = a + b
fmt.Printf ("value of a = %d, b = %d and c = %d\n", a, b, c)
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
value of a = 10, b = 20 and c = 30
Variáveis globais
Variáveis globais são definidas fora de uma função, geralmente no topo do programa. As variáveis globais mantêm seu valor durante todo o tempo de vida do programa e podem ser acessadas dentro de qualquer uma das funções definidas para o programa.
Uma variável global pode ser acessada por qualquer função. Ou seja, uma variável global está disponível para uso em todo o programa após sua declaração. O exemplo a seguir usa variáveis globais e locais -
package main
import "fmt"
/* global variable declaration */
var g int
func main() {
/* local variable declaration */
var a, b int
/* actual initialization */
a = 10
b = 20
g = a + b
fmt.Printf("value of a = %d, b = %d and g = %d\n", a, b, g)
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
value of a = 10, b = 20 and g = 30
Um programa pode ter o mesmo nome para variáveis locais e globais, mas o valor da variável local dentro de uma função tem preferência. Por exemplo -
package main
import "fmt"
/* global variable declaration */
var g int = 20
func main() {
/* local variable declaration */
var g int = 10
fmt.Printf ("value of g = %d\n", g)
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
value of g = 10
Parâmetros Formais
Parâmetros formais são tratados como variáveis locais dentro dessa função e têm preferência sobre as variáveis globais. Por exemplo -
package main
import "fmt"
/* global variable declaration */
var a int = 20;
func main() {
/* local variable declaration in main function */
var a int = 10
var b int = 20
var c int = 0
fmt.Printf("value of a in main() = %d\n", a);
c = sum( a, b);
fmt.Printf("value of c in main() = %d\n", c);
}
/* function to add two integers */
func sum(a, b int) int {
fmt.Printf("value of a in sum() = %d\n", a);
fmt.Printf("value of b in sum() = %d\n", b);
return a + b;
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30
Inicializando Variáveis Locais e Globais
As variáveis locais e globais são inicializadas com seu valor padrão, que é 0; enquanto os ponteiros são inicializados com nil.
Tipo de dados | Valor inicial padrão |
---|---|
int | 0 |
float32 | 0 |
ponteiro | nada |