Conceptos básicos del alcance de las funciones
Parte de la sección Fundamentos del Journey de GO de Coddy — lección 58 de 109.
En Go, las variables declaradas dentro de una función solo son accesibles dentro de esa función. Esto se llama alcance de función (function scope).
Crea una función con una variable local:
func calculateTotal(price int, quantity int) int {
tax := 0.1 * float64(price * quantity) // variable local
total := price * quantity + int(tax)
return total
}
func main() {
result := calculateTotal(10, 2)
fmt.Println("Total:", result)
// fmt.Println(tax) // Error: tax no es accesible aquí
}La salida muestra solo el valor devuelto:
Total: 22La variable tax solo existe dentro de la función calculateTotal y no se puede acceder desde main.
Desafío
PrincipianteEn este desafío, practicarás la comprensión del alcance de las funciones en Go. Necesitas corregir un programa sencillo que tiene un problema de alcance.
El programa tiene una variable global message y una función que intenta modificarla. Tu tarea es corregir el código para que la función actualice correctamente la variable global.
Hoja de referencia
Las variables declaradas dentro de una función solo son accesibles dentro de esa función (ámbito de función):
func calculateTotal(price int, quantity int) int {
tax := 0.1 * float64(price * quantity) // variable local
total := price * quantity + int(tax)
return total
}
func main() {
result := calculateTotal(10, 2)
fmt.Println("Total:", result)
// fmt.Println(tax) // Error: tax no es accesible aquí
}Las variables locales existen solo dentro de su función y no se puede acceder a ellas desde el exterior.
Pruébalo tú mismo
package main
import "fmt"
// Variable global
var message string = "Hello from global scope"
func updateMessage() {
// Esto crea una nueva variable local en lugar de modificar la global
message := "Hello from function scope"
fmt.Println("Inside function:", message)
}
func main() {
fmt.Println("Before function call:", message)
updateMessage()
// TODO: El mensaje global sigue siendo el valor original
// Modifica la función updateMessage() para cambiar la variable global
fmt.Println("After function call:", message)
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores de comparación y lógicos
Operadores de comparación - Parte 1Operadores de comparación - Parte 2Operador lógico ANDOperador lógico OROperador lógico NOTConceptos básicos de precedencia de operadoresResumen: Realizar comparaciones7Flujo de control: Bucles
Explicación del bucle `for`Bucle `for` - BásicoBucle `for` - Solo condiciónLa palabra clave `break`La palabra clave `continue`Bucles anidadosResumen - Repetición de acciones2Variables y tipos de datos básicos
¿Qué es una variable?Inferencia de tipos con `:=`Enteros (int)Números de punto flotanteBooleanosStringsValores ceroConstantesConvenciones de nomenclaturaResumen - Variables y tipos5Entrada y salida básica
Salida con formatoVerbos de formatoImpresión de tiposObtener entrada básica del usuarioResumen: Entrada y salida8Funciones
Comprendiendo las funcionesDeclaración de una funciónLlamada a funcionesParámetros de funciónRetorno de un solo valorRetorno de múltiples valoresValores de retorno con nombreConceptos básicos del alcance de las funcionesResumen: Creando código reutilizable3Operadores básicos
Operadores aritméticosOperador de divisiónEl operador móduloOperador de asignaciónOperadores de asignación compuestaIncremento y decrementoResumen - Cálculos6Flujo de control: Condicionales
La sentencia `if`La palabra clave `else`La palabra clave `else if`Sombreado de variables en `if`Inicialización de variablesLa sentencia `switch``switch` con expresiones`switch` sin expresiónLa palabra clave `fallthrough`Resumen: Toma de decisiones