Punteros a Structs
Parte de la sección Fundamentos del Journey de GO de Coddy — lección 97 de 109.
Al trabajar con structs, puedes crear punteros a ellos al igual que con otros tipos. Esto es útil para pasar structs grandes de manera eficiente.
Define una estructura Person y crea un puntero hacia ella:
type Person struct {
name string
age int
}
func main() {
person := Person{name: "Alice", age: 30}
// Create a pointer to the struct
personPtr := &person
// Access fields through pointer
fmt.Println(personPtr.name)
fmt.Println(personPtr.age)
}La salida muestra que podemos acceder a los campos a través del puntero:
Alice
30También puedes modificar campos a través del puntero:
personPtr.age = 31
fmt.Println(person.age) // Imprime: 31Desafío
PrincipianteEn este desafío, practicarás el trabajo con punteros a estructuras en Go. Tienes una estructura Person con los campos name y age. Tu tarea es actualizar la información de la persona utilizando un puntero a la estructura.
El código ya crea una estructura Person y un puntero a ella. Debes modificar la información de la persona a través del puntero.
Hoja de referencia
Crea punteros a estructuras usando el operador &:
type Person struct {
name string
age int
}
person := Person{name: "Alice", age: 30}
personPtr := &personAccede y modifica campos de estructuras a través de punteros:
// Acceder a los campos
fmt.Println(personPtr.name)
fmt.Println(personPtr.age)
// Modificar los campos
personPtr.age = 31Pruébalo tú mismo
package main
import "fmt"
// Estructura Person con campos de nombre y edad
type Person struct {
name string
age int
}
func main() {
// Crear una estructura Person
person := Person{
name: "John",
age: 25,
}
// Crear un puntero a la estructura Person
personPtr := &person
// Imprimir la información original de la persona
fmt.Println("Original person:")
fmt.Printf("Name: %s, Age: %d\n", person.name, person.age)
// TODO: Usar el puntero para cambiar el nombre de la persona a "Jane" y la edad a 30
// Sugerencia: Puedes acceder a los campos de la estructura a través de un puntero usando la notación de punto
// Imprimir la información actualizada de la persona
fmt.Println("Updated person:")
fmt.Printf("Name: %s, Age: %d\n", person.name, person.age)
}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