En este concepto veremos que los campos de un registro (struct) pueden ser también de tipo registro, es decir anidar un registro dentro de otro registro.
Se tienen las siguientes declaraciones de registros:
type Fecha struct { dia int mes int año int } type Producto struct { codigo int descripcion string precio float64 fechavencimiento Fecha }En la función main definir una variable de tipo "Producto".
package main import "fmt" type Fecha struct { dia int mes int año int } type Producto struct { codigo int descripcion string precio float64 fechavencimiento Fecha } func cargar(producto *Producto) { fmt.Print("Ingrese código:") fmt.Scan(&producto.codigo) fmt.Print("Descripción:") fmt.Scan(&producto.descripcion) fmt.Print("Ingrese el precio:") fmt.Scan(&producto.precio) fmt.Println("Ingrese fecha de vencimiento") fmt.Print("Dia:") fmt.Scan(&producto.fechavencimiento.dia) fmt.Print("Mes:") fmt.Scan(&producto.fechavencimiento.mes) fmt.Print("Año:") fmt.Scan(&producto.fechavencimiento.año) } func imprimir(producto Producto) { fmt.Print(producto) } func main() { var producto1 Producto cargar(&producto1) imprimir(producto1) }
El struct Producto tiene 4 campos, el cuarto es fechavencimiento que es de tipo Fecha.
Ahora cuando debemos acceder al campo fecha vencimiento para su carga debemos indicar cada uno de los campos que tiene dicho struct:
fmt.Print("Dia:") fmt.Scan(&producto.fechavencimiento.dia) fmt.Print("Mes:") fmt.Scan(&producto.fechavencimiento.mes) fmt.Print("Año:") fmt.Scan(&producto.fechavencimiento.año)
Utilizamos el operador punto para acceder a los campos del registro producto como los subcampos de fechavencimiento.
type Punto struct { x int y int } type Triangulo struct { punto1 Punto punto2 Punto punto3 Punto }Definir en la main un registro de tipo Triangulo.
ejercicio130.go package main import "fmt" type Punto struct { x int y int } type Triangulo struct { punto1 Punto punto2 Punto punto3 Punto } func cargar(triangulo *Triangulo) { fmt.Print("Ingrese coordenada x primer punto:") fmt.Scan(&triangulo.punto1.x) fmt.Print("Ingrese coordenada y primer punto:") fmt.Scan(&triangulo.punto1.y) fmt.Print("Ingrese coordenada x segundo punto:") fmt.Scan(&triangulo.punto2.x) fmt.Print("Ingrese coordenada y segundo punto:") fmt.Scan(&triangulo.punto2.y) fmt.Print("Ingrese coordenada x tercer punto:") fmt.Scan(&triangulo.punto3.x) fmt.Print("Ingrese coordenada y tercer punto:") fmt.Scan(&triangulo.punto3.y) } func imprimir(triangulo Triangulo) { fmt.Println("Los vértices del triángulo están ubicados en:") fmt.Println("(", triangulo.punto1.x, ",", triangulo.punto1.y, ")") fmt.Println("(", triangulo.punto2.x, ",", triangulo.punto2.y, ")") fmt.Println("(", triangulo.punto3.x, ",", triangulo.punto3.y, ")") } func main() { var triangulo1 Triangulo cargar(&triangulo1) imprimir(triangulo1) }