Introducción
Este laboratorio tiene como objetivo probar tus conocimientos sobre los structs de Go, que son colecciones tipadas de campos. Los structs son útiles para agrupar datos juntos para formar registros.
Structs
En este laboratorio, debes completar la función newPerson que construye un nuevo struct de persona con el nombre dado. El tipo de struct person tiene los campos name y age.
- El tipo de struct
persondebe tener los camposnameyage. - La función
newPersondebe construir un nuevo struct de persona con el nombre dado. - La función
newPersondebe devolver un puntero al nuevo struct de persona creado. - La función
maindebe imprimir lo siguiente:- Un nuevo struct con nombre "Bob" y edad 20.
- Un nuevo struct con nombre "Alice" y edad 30.
- Un nuevo struct con nombre "Fred" y edad 0.
- Un puntero a un nuevo struct con nombre "Ann" y edad 40.
- Un nuevo struct construido usando la función
newPersoncon nombre "Jon" y edad 42. - El campo
namede un struct con nombre "Sean" y edad 50. - El campo
agede un puntero a un struct con nombre "Sean" y edad 50. - El campo
agede un puntero a un struct con nombre "Sean" y edad 50 después de que el campoagese haya actualizado a 51.
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
&{Jon 42}
Sean
50
51
A continuación está el código completo:
// Los _structs_ de Go son colecciones tipadas de campos.
// Son útiles para agrupar datos juntos para formar
// registros.
package main
import "fmt"
// Este tipo de struct `person` tiene los campos `name` y `age`.
type person struct {
name string
age int
}
// `newPerson` construye un nuevo struct de persona con el nombre dado.
func newPerson(name string) *person {
// Puedes devolver con seguridad un puntero a una variable local
// ya que una variable local sobrevivirá al alcance de la función.
p := person{name: name}
p.age = 42
return &p
}
func main() {
// Esta sintaxis crea un nuevo struct.
fmt.Println(person{"Bob", 20})
// Puedes nombrar los campos al inicializar un struct.
fmt.Println(person{name: "Alice", age: 30})
// Los campos omitidos tendrán valores por defecto.
fmt.Println(person{name: "Fred"})
// Un prefijo `&` produce un puntero al struct.
fmt.Println(&person{name: "Ann", age: 40})
// Es idiomático encapsular la creación de nuevos structs en funciones constructoras
fmt.Println(newPerson("Jon"))
// Accede a los campos de un struct con un punto.
s := person{name: "Sean", age: 50}
fmt.Println(s.name)
// También puedes usar puntos con punteros a structs - los
// punteros se desreferencian automáticamente.
sp := &s
fmt.Println(sp.age)
// Los structs son mutables.
sp.age = 51
fmt.Println(sp.age)
}
Resumen
En este laboratorio, aprendiste cómo usar los structs de Go para agrupar datos juntos y formar registros. También aprendiste cómo crear nuevos structs, acceder a los campos de un struct y actualizar los campos de un struct.