Uso de punteros en funciones
Parte de la sección Fundamentos del Journey de GO de Coddy — lección 64 de 109.
Las funciones pueden aceptar y modificar variables a través de punteros. Esto permite que las funciones cambien el valor original, no solo una copia.
Crea una función que modifique un valor a través de un puntero:
func main() {
number := 10
fmt.Println("Before:", number)
// Pasa la dirección de number
doubleValue(&number)
fmt.Println("After:", number)
}
func doubleValue(num *int) {
// Modifica el valor en la dirección del puntero
*num = *num * 2
}La salida muestra el valor cambiado por la función:
Before: 10
After: 20Cuando pasamos &number, la función recibe un puntero y puede modificar la variable original.
Desafío
PrincipianteEn este desafío, practicarás el uso de punteros en funciones. Debes completar una función que recibe un puntero a una cadena y modifica el valor de la cadena para que esté en mayúsculas.
La función makeUppercase ya está definida para ti. Tu tarea es modificar la cadena a la que apunta el puntero utilizando la función strings.ToUpper().
Hoja de referencia
Las funciones pueden modificar variables a través de punteros al recibir la dirección de memoria en lugar de una copia:
func main() {
number := 10
// Pasar la dirección de number usando &
doubleValue(&number)
fmt.Println(number) // Salida: 20
}
func doubleValue(num *int) {
// Modificar el valor en la dirección del puntero usando *
*num = *num * 2
}Sintaxis clave de punteros:
&variable- obtiene la dirección de una variable*pointer- desreferencia un puntero para acceder/modificar el valor*type- declara un tipo de parámetro de puntero
Pruébalo tú mismo
package main
import (
"fmt"
"strings"
)
// makeUppercase toma un puntero a una cadena y cambia la cadena a mayúsculas
func makeUppercase(strPtr *string) {
// TODO: Usa strings.ToUpper() para cambiar la cadena a la que apunta strPtr
// Pista: Necesitas desreferenciar el puntero para acceder al valor de la cadena
? = strings.ToUpper(?)
}
func main() {
// Ya tenemos una variable de cadena
message := "hello, world"
// Imprimir el mensaje original
fmt.Printf("Original message: %s\n", message)
// Llamar a makeUppercase con la dirección de message
makeUppercase(&message)
// Imprimir el mensaje modificado
fmt.Printf("Modified message: %s\n", 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