Escopos Locais e Globais
Neste ponto, é fundamental explorar o conceito de escopos para compreender as áreas onde variáveis (ou constantes) específicas podem ser acessadas e onde não podem.
O escopo de uma variável ou constante define onde ela pode ser utilizada.
Quando uma variável ou constante é declarada fora de qualquer bloco de código, ela se torna acessível em todo o programa, recebendo assim o rótulo de escopo global. No trecho de código a seguir, a constante pi exemplifica esse escopo global:
index.go
12345678package main import "fmt" const pi float32 = 3.1415 func main() { fmt.Println(pi) }
Por outro lado, quando uma variável ou constante é declarada dentro de um bloco de código, ela permanece acessível apenas dentro desse bloco específico e em quaisquer blocos de código aninhados, se aplicável.
A ilustração abaixo delineia as distinções entre escopos globais e locais:
O código a seguir demonstra as áreas onde o acesso à variável é permitido e onde podem ocorrer erros:
index.go
12345678910111213141516171819202122232425262728package main import "fmt" func main() { var value_1 int = 1 // Condition 1 if(true) { var value_2 int = 2 // Condition 2 if (true) { var value_3 int = 3 fmt.Println("In Condition 2:", value_1) fmt.Println("In Condition 2:", value_2) fmt.Println("In Condition 2:", value_3) } fmt.Println("In Condition 1:", value_1) fmt.Println("In Condition 1:", value_2) fmt.Println("In Condition 1:", value_3) // Error here } fmt.Println("In Main:", value_1) fmt.Println("In Main:", value_2) // Error here fmt.Println("In Main:", value_3) // Error here }
A variável value_1 permanece acessível em todo o bloco de código main(), incluindo blocos de código aninhados como Condição 1 e Condição 2. Ela também está acessível dentro da Condição 1 e sua Condição 2 aninhada.
No entanto, tentar acessá-la diretamente fora do bloco main() resultará em um erro. Da mesma forma, a variável value_2, declarada dentro da Condição 2, só está acessível dentro desse bloco de código específico.
É fundamental considerar os escopos no contexto das funções. Ao declarar uma variável ou constante dentro de uma função, ela permanece restrita a essa função e fica inacessível em outras funções, incluindo main().
Nota
A função
main()é executada automaticamente quando o programa é iniciado.
index.go
12345678func myFunc() { var number int = 7 fmt.Println(number) // Accessible here } func main() { fmt.Println(number) // Not accessible here }
Outro ponto fundamental a ser considerado é que não é possível declarar duas ou mais variáveis com o mesmo nome dentro do mesmo escopo ou em escopos sobrepostos.
index.go
1234567891011func myFunc1() { var number int = 7 var number int = 9 // Error here } func myFunc2() { var number int = 7 if(2 > 1) { var number int = 9 // Error here } }
No entanto, é possível declarar variáveis com o mesmo nome em diferentes escopos:
index.go
1234567891011121314151617package main import "fmt" func myFunc1() { var number int = 7 fmt.Println("In Func 1:", number) } func myFunc2() { var number int = 9 fmt.Println("In Func 2:", number) } func main() { myFunc1() myFunc2() }
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 1.96
Escopos Locais e Globais
Deslize para mostrar o menu
Neste ponto, é fundamental explorar o conceito de escopos para compreender as áreas onde variáveis (ou constantes) específicas podem ser acessadas e onde não podem.
O escopo de uma variável ou constante define onde ela pode ser utilizada.
Quando uma variável ou constante é declarada fora de qualquer bloco de código, ela se torna acessível em todo o programa, recebendo assim o rótulo de escopo global. No trecho de código a seguir, a constante pi exemplifica esse escopo global:
index.go
12345678package main import "fmt" const pi float32 = 3.1415 func main() { fmt.Println(pi) }
Por outro lado, quando uma variável ou constante é declarada dentro de um bloco de código, ela permanece acessível apenas dentro desse bloco específico e em quaisquer blocos de código aninhados, se aplicável.
A ilustração abaixo delineia as distinções entre escopos globais e locais:
O código a seguir demonstra as áreas onde o acesso à variável é permitido e onde podem ocorrer erros:
index.go
12345678910111213141516171819202122232425262728package main import "fmt" func main() { var value_1 int = 1 // Condition 1 if(true) { var value_2 int = 2 // Condition 2 if (true) { var value_3 int = 3 fmt.Println("In Condition 2:", value_1) fmt.Println("In Condition 2:", value_2) fmt.Println("In Condition 2:", value_3) } fmt.Println("In Condition 1:", value_1) fmt.Println("In Condition 1:", value_2) fmt.Println("In Condition 1:", value_3) // Error here } fmt.Println("In Main:", value_1) fmt.Println("In Main:", value_2) // Error here fmt.Println("In Main:", value_3) // Error here }
A variável value_1 permanece acessível em todo o bloco de código main(), incluindo blocos de código aninhados como Condição 1 e Condição 2. Ela também está acessível dentro da Condição 1 e sua Condição 2 aninhada.
No entanto, tentar acessá-la diretamente fora do bloco main() resultará em um erro. Da mesma forma, a variável value_2, declarada dentro da Condição 2, só está acessível dentro desse bloco de código específico.
É fundamental considerar os escopos no contexto das funções. Ao declarar uma variável ou constante dentro de uma função, ela permanece restrita a essa função e fica inacessível em outras funções, incluindo main().
Nota
A função
main()é executada automaticamente quando o programa é iniciado.
index.go
12345678func myFunc() { var number int = 7 fmt.Println(number) // Accessible here } func main() { fmt.Println(number) // Not accessible here }
Outro ponto fundamental a ser considerado é que não é possível declarar duas ou mais variáveis com o mesmo nome dentro do mesmo escopo ou em escopos sobrepostos.
index.go
1234567891011func myFunc1() { var number int = 7 var number int = 9 // Error here } func myFunc2() { var number int = 7 if(2 > 1) { var number int = 9 // Error here } }
No entanto, é possível declarar variáveis com o mesmo nome em diferentes escopos:
index.go
1234567891011121314151617package main import "fmt" func myFunc1() { var number int = 7 fmt.Println("In Func 1:", number) } func myFunc2() { var number int = 9 fmt.Println("In Func 2:", number) } func main() { myFunc1() myFunc2() }
Obrigado pelo seu feedback!