Fundamentos de Escopo de Função
Parte da seção Fundamentos do Journey de GO da Coddy — lição 58 de 109.
Em Go, variáveis declaradas dentro de uma função são acessíveis apenas dentro dessa função. Isso é chamado de escopo de função.
Crie uma função com uma variável local:
func calculateTotal(price int, quantity int) int {
tax := 0.1 * float64(price * quantity) // variável local
total := price * quantity + int(tax)
return total
}
func main() {
result := calculateTotal(10, 2)
fmt.Println("Total:", result)
// fmt.Println(tax) // Erro: tax não está acessível aqui
}A saída mostra apenas o valor retornado:
Total: 22A variável tax existe apenas dentro da função calculateTotal e não pode ser acessada a partir de main.
Desafio
InicianteNeste desafio, você praticará a compreensão do escopo de função em Go. Você precisa corrigir um programa simples que possui um problema de escopo.
O programa possui uma variável global message e uma função que tenta modificá-la. Sua tarefa é corrigir o código para que a função atualize corretamente a variável global.
Folha de consulta
Variáveis declaradas dentro de uma função são acessíveis apenas dentro dessa função (escopo de função):
func calculateTotal(price int, quantity int) int {
tax := 0.1 * float64(price * quantity) // local variable
total := price * quantity + int(tax)
return total
}
func main() {
result := calculateTotal(10, 2)
fmt.Println("Total:", result)
// fmt.Println(tax) // Error: tax is not accessible here
}Variáveis locais existem apenas dentro de sua função e não podem ser acessadas de fora.
Experimente você mesmo
package main
import "fmt"
// Variável global
var message string = "Hello from global scope"
func updateMessage() {
// Isso cria uma nova variável local em vez de modificar a global
message := "Hello from function scope"
fmt.Println("Inside function:", message)
}
func main() {
fmt.Println("Before function call:", message)
updateMessage()
// TODO: A mensagem global ainda é o valor original
// Modifique a função updateMessage() para alterar a variável global
fmt.Println("After function call:", message)
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores de Comparação e Lógicos
Operadores de Comparação - Parte 1Operadores de Comparação - Parte 2Operador Lógico ANDOperador Lógico OROperador Lógico NOTFundamentos de Precedência de OperadoresRecapitulação - Fazendo Comparações7Fluxo de Controle: Loops
O Loop `for` ExplicadoLoop For - BásicoLoop For - Apenas CondiçãoA Palavra-chave `break`A Palavra-chave `continue`Loops AninhadosRecapitulação - Repetindo Ações2Variáveis e Tipos de Dados Básicos
O que é uma variávelInferência de Tipo com `:=`Inteiros (int)Números de Ponto FlutuanteBooleanosStringsValores ZeroConstantesConvenções de NomenclaturaRecapitulação - Variáveis e Tipos5Entrada/Saída Básica
Saída FormatadaVerbos de FormataçãoImprimindo TiposObtendo Entrada Básica do UsuárioRecapitulação - Entrada e Saída8Funções
Entendendo FunçõesDeclarando uma FunçãoChamando FunçõesParâmetros de FunçãoRetornando um Único ValorRetornando Múltiplos ValoresValores de Retorno NomeadosFundamentos de Escopo de FunçãoRecapitulação - Criando Código Reutilizável3Operadores Básicos
Operadores AritméticosOperador de DivisãoO Operador MóduloOperador de AtribuiçãoOperadores de Atribuição CompostaIncremento e DecrementoRecapitulação - Cálculos6Fluxo de Controle: Condicionais
A Instrução `if`A Palavra-chave `else`A Palavra-chave `else if`Sombreamento de Variáveis no `if`Inicializando VariáveisA Instrução `switch`Switch com ExpressõesSwitch sem ExpressãoA Palavra-chave `fallthrough`Recapitulação - Tomando Decisões