Menu
Coddy logo textTech

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: 22

A variável tax existe apenas dentro da função calculateTotal e não pode ser acessada a partir de main.

challenge icon

Desafio

Iniciante

Neste 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)
}
quiz iconTeste seus conhecimentos

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