Lección 14 · 14 de 20
Estructuras · Go
Agrupe datos relacionados en un struct de Go: campos, literales por nombre o por orden, %+v, copias y slices de estructuras.

Un struct reúne varios datos relacionados en un tipo nuevo. type Book struct define un libro con cuatro campos: Title y Author, de texto (comparten tipo y van en la misma línea), Pages, entero, y Read, lógico. Los nombres empiezan por mayúscula, como es costumbre en Go para lo que se comparte con otros paquetes.
Un libro se crea con un literal. Con nombres, Book{Title: "Emma", ...}, se pueden omitir campos, que toman su valor cero: Read queda en false. Sin nombres hay que dar todos, en el orden de la definición, como en tale.
El punto lee y cambia un campo: novel.Read = true. fmt.Println escribe los valores entre llaves, y %+v añade el nombre de cada campo, muy útil para depurar.
Asignar un struct lo copia, como pasaba con los arrays: cambiar gift.Title no cambia tale. Un slice de estructuras, []Book, forma una pequeña estantería; dentro del literal no hace falta repetir Book en cada elemento. El for escribe cada libro en columnas y suma las páginas: 1132.
Código · main.go
package mainimport "fmt"// A struct groups related fields into one type.type Book struct { Title, Author string Pages int Read bool}func main() { // Fields by name; the missing ones take their zero value. novel := Book{Title: "Emma", Author: "Jane Austen", Pages: 474} tale := Book{"Matilda", "Roald Dahl", 240, true} // or all, in order novel.Read = true // the dot reads and changes fields fmt.Println(novel) fmt.Printf("%+v\n", tale) // %+v also shows the field names // Assigning a struct copies it. gift := tale gift.Title = "Matilda (gift)" fmt.Println(tale.Title, "|", gift.Title) // A slice of structs: a small bookshelf. shelf := []Book{novel, tale, {Title: "Dracula", Author: "Bram Stoker", Pages: 418}} total := 0 for i := 0; i < len(shelf); i++ { fmt.Printf("%-8s %-12s %4d %v\n", shelf[i].Title, shelf[i].Author, shelf[i].Pages, shelf[i].Read) total += shelf[i].Pages } fmt.Println("Total pages:", total)}Salida · go run main.go
{Emma Jane Austen 474 true}
{Title:Matilda Author:Roald Dahl Pages:240 Read:true}
Matilda | Matilda (gift)
Emma Jane Austen 474 true
Matilda Roald Dahl 240 true
Dracula Bram Stoker 418 false
Total pages: 1132Para recordar
type Nombre struct { campos }define un tipo nuevo.T{Campo: valor}permite omitir campos;T{v1, v2}los pide todos.variable.Campolee o cambia un campo.%+vescribe un struct con los nombres de sus campos.- Asignar un struct hace una copia.
Ejercicio
Añada a Book un campo Year int, dele un año a cada libro y escriba solo los que tengan más de 400 páginas, junto con su año.