El manejo de funciones o métodos en Go es esencial para simplificar tareas repetitivas y mantener un código organizado. Una función es una sentencia específica que ejecuta acciones encapsuladas entre paréntesis. Por ejemplo, la función len() evalúa la longitud de un arreglo.
¿Qué es exactamente una función en Go?
Una función en Go está compuesta por la palabra reservada func, seguida de un nombre descriptivo y parámetros entre paréntesis. Los parámetros especifican el tipo de dato requerido, permitiendo múltiples variables del mismo o diferentes tipos.
Aquí, la función suma recibe dos parámetros enteros y devuelve un resultado entero después de realizar la operación solicitada.
¿Cómo puedo crear e invocar funciones personalizadas?
Crear múltiples funciones con diferentes objetivos mejora la claridad y reutilización. Puedes declarar funciones con diferentes cantidades de parámetros.
Invocas estas funciones en tu función principal main, pasando los parámetros necesarios:
funcmain(){var numero1, numero2, numero3 int fmt.Print("Ingresa el primer número: ") fmt.Scanln(&numero1) fmt.Print("Ingresa el segundo número: ") fmt.Scanln(&numero2) fmt.Print("Ingresa el tercer número: ") fmt.Scanln(&numero3) resultado :=suma(numero1, numero2) fmt.Println("La suma de los dos números es", resultado) resultadoLargo :=sumaLarga(numero1, numero2, numero3) fmt.Println("La suma de los tres números es", resultadoLargo)}
Al ejecutar este programa mediante la consola, la aplicación pide a los usuarios ingresar los valores para luego realizar las sumas solicitadas.
¿Cómo puedo evitar errores en mis funciones?
Al construir aplicaciones es habitual enfrentarse a posibles errores. En operaciones como la división, donde puedes dividir por cero, resulta útil evaluar previamente:
if numero2 ==0{ fmt.Println("Error: no se puede dividir entre cero.")}else{ resultado := numero1 / numero2
fmt.Println("El resultado de la división es", resultado)}
Estos controles simples evitan errores críticos y mejoran la robustez del código.
Te invito a practicar creando múltiples funciones como restas, multiplicaciones, divisiones y asegurarte de manejar correctamente posibles errores. ¿Tienes otras funciones que quisieras aprender a programar? Comparte tus dudas en los comentarios.
Entiendo que este simbolo "&" lo que hace es pasar la dirección de memoria donde va almacenar el valor
Te lo explicó un ejemplo, sobre punteros:
package fundamentals
// Los apuntadores (o punteros) permiten almacenar la dirección de memoria de una variable.// En Go, los apuntadores se representan con el símbolo * seguido del tipo de dato al que apunta.// Para obtener la dirección de memoria de una variable, se utiliza el símbolo & seguido del nombre de la variable.// Solo pueden apuntar a un tipo en concreto, no se pueden mezclar tipos de datos.import "fmt"func Pointers(){ fmt.Println("Punteros") var puntero *int numero :=10 puntero =&numero // direccion de memoria fmt.Printf("El valor de la variable es %v\n", numero) fmt.Printf("La dirección de memoria de la variable es %v\n",&numero) fmt.Printf("El valor de la variable a la que apunta el puntero es %v\n",*puntero) fmt.Printf("La dirección de memoria de la variable a la que apunta el puntero es %v\n", puntero)// cambiar el valor de la variable*puntero =20 fmt.Printf("El nuevo valor de la variable es %v\n", numero)}
package main
import"fmt"func sumar(a int, b int) int {resultado:= a + b
return resultado
}func sumarVarios(numeros ...int) int {resultado:=0for _,numero:= range numeros { resultado += numero
}return resultado
}func main(){var numero1, numero2, numero3 int
fmt.Println("Ingrese el primer número:") fmt.Scanln(&numero1) fmt.Println("Ingrese el segundo número:") fmt.Scanln(&numero2) fmt.Println("Ingrese el tercer número:") fmt.Scanln(&numero3)resultadoSuma:=sumar(numero1, numero2) fmt.Printf("La suma de %d y %d es: %d\n", numero1, numero2, resultadoSuma)resultadoSumaVarios:=sumarVarios(numero1, numero2, numero3) fmt.Printf("La suma de %d, %d y %d es: %d\n", numero1, numero2, numero3, resultadoSumaVarios)}
Para trabajar con entadas dejo este ejemplo:
package fundamentals
// Para valores simples → Scan : Lee valores ignorando espacios y saltos de línea// Para valores en una línea → Scanln: Lee solo hasta el salto de línea// Para formatos específicos → Scanf: Permite especificar un formato exacto// Para texto con espacios → bufio.NewReader: Lee líneas completas incluyendo espaciosimport("bufio""fmt""os""strings")func Inputs(){// 1. Scan - Lectura básica var edad int fmt.Print("Ingresa tu edad: ") fmt.Scan(&edad) fmt.Printf("Edad leída con Scan: %d\n\n", edad)// 2. Scanln - Dos valores en una línea reader := bufio.NewReader(os.Stdin)// Crear un lector reader.ReadString('\n')// limpiar el buffer var dia, mes int fmt.Print("Ingresa día y mes (ejemplo: 15 3): ") fmt.Scanln(&dia,&mes) fmt.Printf("Fecha leída con Scanln: %d/%d\n\n", dia, mes)// 3. Scanf - Formato específico var horas, minutos int fmt.Print("Ingresa la hora (formato HH:MM): ") fmt.Scanf("%d:%d",&horas,&minutos) fmt.Printf("Hora leída con Scanf: %02d:%02d\n\n", horas, minutos)// 4. bufio.NewReader - Texto con espacios reader.ReadString('\n')// Limpiar el buffer fmt.Print("Ingresa otra frase: ") frase, _ := reader.ReadString('\n')// Leer hasta el salto de línea//frase = strings.TrimSpace(frase) // Limpiar espacios al inicio y final fmt.Printf("[%s]\n", frase) fmt.Printf("Longitud: %d\n",len(frase))// 5. Ejemploexample()}func example(){println("\nOtro ejemplo:")// captura nombre y edad var nombre string
var edad int fmt.Print("Ingresa tu nombre y edad: ") fmt.Scan(&nombre,&edad) fmt.Printf("Nombre: %s, Edad: %d\n", nombre, edad)// Limpiar el buffer de entrada bufio.NewReader(os.Stdin).ReadString('\n')// captura frase scanner := bufio.NewScanner(os.Stdin) fmt.Print("Escribe tu frase favorita: ") scanner.Scan() frase := strings.TrimSpace(scanner.Text())// elimina espacios en blanco fmt.Println("Tu frase es:", frase)}
package functions
// Las funciones sirven para encapsular código y reutilizarlo// Algunos puntos importantes adicionales:// Todas las funciones en Go deben definirse con la palabra clave func// El nombre de la función debe comenzar con una letra// Si una función empieza con mayúscula, será exportada (pública)// Si empieza con minúscula, será privada al paqueteimport "fmt"// Recibe un parámetro y solo realiza una acción (imprimir)func saludar(nombre string){ fmt.Printf("¡Hola %s!\n", nombre)}func Simple(){ fmt.Println("Función simple:")saludar("Ronaldo") fmt.Println()}
Para verificar que el usuario no introduzca valores erróneos como letras```js
package main
import (
"fmt"
)
// readInt solicita al usuario un número entero y valida la entrada.
// Si el usuario ingresa un dato inválido, muestra un mensaje de error
// y vuelve a solicitar el dato hasta que sea válido.
func readInt(prompt string) int {
var n int
for {
fmt.Println(prompt)
_, err := fmt.Scanln(&n)
if err != nil {
fmt.Println("Entrada inválida. Por favor, ingrese solo números.")
// Limpiar el buffer de entrada
var discard string
fmt.Scanln(&discard)
continue
}
break
}
return n
}
// sum recibe tres enteros y retorna su suma.
func sum(a int, b int, c int) int {
return a + b + c
}
func main() {
// Solicita tres números al usuario y muestra la suma.
a := readInt("Ingrese el primer número:")
b := readInt("Ingrese el segundo número:")
c := readInt("Ingrese el tercer número:")
resultado := sum(a, b, c)
fmt.Println("La suma es:", resultado)
}
formato correcto
package main
import (
"fmt"
)
// readInt solicita al usuario un número entero y valida la entrada.
// Si el usuario ingresa un dato inválido, muestra un mensaje de error
// y vuelve a solicitar el dato hasta que sea válido.
func readInt(prompt string) int {
var n int
for {
fmt.Println(prompt)
_, err := fmt.Scanln(&n)
if err != nil {
fmt.Println("Entrada inválida. Por favor, ingrese solo números.")
// Limpiar el buffer de entrada
var discard string
fmt.Scanln(&discard)
continue
}
break
}
return n
}
// sum recibe tres enteros y retorna su suma.
func sum(a int, b int, c int) int {
return a + b + c
}
func main() {
// Solicita tres números al usuario y muestra la suma.
a := readInt("Ingrese el primer número:")
b := readInt("Ingrese el segundo número:")
c := readInt("Ingrese el tercer número:")
resultado := sum(a, b, c)
fmt.Println("La suma es:", resultado)
}