Cuando pasamos un struct a una función lo que sucede es que se hace una copia de la misma (es lo mismo que sucede con los arrays)
Si queremos modificar el registro en la función debemos pasar la dirección del registro y por lo tanto que lo reciba un puntero.
Se tiene la siguiente declaración de registro:
type Producto struct { codigo int descripcion string precio float64 }En la función main definir una variable de tipo "Producto".
package main import "fmt" type Producto struct { codigo int descripcion string precio float64 } func cargar(producto *Producto) { fmt.Print("Ingrese el código:") fmt.Scan(&producto.codigo) fmt.Print("Ingrese la descripción:") fmt.Scan(&producto.descripcion) fmt.Print("Ingrese el precio") fmt.Scan(&producto.precio) } func imprimir(producto Producto) { fmt.Println("Codigo:", producto.codigo) fmt.Println("Descripcion:", producto.descripcion) fmt.Println("Precio:", producto.precio) } func main() { var producto1 Producto cargar(&producto1) imprimir(producto1) }
Como vemos cuando queremos modificar un registro en una función debemos pasar la dirección del registro desde la main y la función lo recibe mediante un puntero:
func cargar(producto *Producto) {
Desde la main le enviamos la dirección de la variable:
func main() { var producto1 Producto cargar(&producto1)
Dentro de la función debemos acceder a los campos del registro con la misma sintaxis vista sin punteros:
func cargar(producto *Producto) { fmt.Print("Ingrese el código:") fmt.Scan(&producto.codigo) fmt.Print("Ingrese la descripción:") fmt.Scan(&producto.descripcion) fmt.Print("Ingrese el precio") fmt.Scan(&producto.precio) }
Como la función imprimir no necesita modificar el registro que le enviamos no le pasamos una dirección sino el registro propiamente dicho:
func imprimir(producto Producto) { fmt.Println("Codigo:", producto.codigo) fmt.Println("Descripcion:", producto.descripcion) fmt.Println("Precio:", producto.precio) }
type Pais struct { nombre string cantidadhab int }Definir tres variables de tipo país en la función main. Crear una función que reciba un puntero de tipo Pais y cargue por teclado el nombre del país y la cantidad de habitantes.
ejercicio128.go package main import "fmt" type Pais struct { nombre string cantidadhab int } func cargar(pais *Pais) { fmt.Print("Ingrese el nombre del país:") fmt.Scan(&pais.nombre) fmt.Print("Ingrese la cantidad de habitantes:") fmt.Scan(&pais.cantidadhab) } func imprimir(pais Pais) { fmt.Println("País:", pais.nombre) fmt.Println("Habitantes:", pais.cantidadhab) fmt.Println("------------------------------") } func main() { var pais1, pais2, pais3 Pais cargar(&pais1) cargar(&pais2) cargar(&pais3) imprimir(pais1) imprimir(pais2) imprimir(pais3) }