Go

Go

Tutorial Go: Funciones

Go funciones: aprende a definir, llamar y manejar parámetros, argumentos y retornos múltiples para escribir código efectivo y seguro.

Aprende Go GRATIS y certifícate

Definición y llamada de funciones

En Go, las funciones son bloques de código que realizan una tarea específica y pueden ser reutilizadas en diferentes partes de un programa. La definición de una función comienza con la palabra clave func, seguida del nombre de la función, una lista de parámetros entre paréntesis, y el tipo de retorno si lo hay. A continuación, se coloca el cuerpo de la función entre llaves {}.

El siguiente es un ejemplo básico de definición de una función en Go:

func sumar(a int, b int) int {
    return a + b
}

En este ejemplo, sumar es el nombre de la función, que toma dos parámetros de tipo entero (a y b) y devuelve un entero. El cuerpo de la función contiene una instrucción que retorna la suma de los dos parámetros.

Para llamar a una función en Go, simplemente se utiliza el nombre de la función seguido de los argumentos entre paréntesis. Es importante que los tipos y el número de argumentos coincidan con los definidos en la función. Aquí se muestra cómo llamar a la función sumar:

resultado := sumar(3, 5)

En este caso, la función sumar es llamada con los argumentos 3 y 5, y el resultado es almacenado en la variable resultado.

Las funciones en Go pueden ser definidas en cualquier parte del paquete, pero es común definirlas al principio o al final de un archivo para mantener la organización del código. Además, las funciones pueden ser anónimas y asignadas a variables, lo que permite su uso como valores de primera clase.

Un ejemplo de función anónima sería:

restar := func(a int, b int) int {
    return a - b
}

En este caso, restar es una variable que almacena una función anónima que resta dos números. Las funciones anónimas son útiles para situaciones donde se necesita una función para un uso específico y único.

Parámetros, argumentos y valores de retorno

En Go, los parámetros de una función se definen en su declaración y especifican los tipos de datos que la función puede recibir. Los parámetros se listan entre paréntesis después del nombre de la función, y cada uno consta de un nombre seguido de su tipo. Es posible definir múltiples parámetros del mismo tipo sin repetir el tipo para cada uno, por ejemplo:

func procesarDatos(x, y int, z string) {
    // cuerpo de la función
}

Aquí, x y y son parámetros de tipo entero, mientras que z es de tipo cadena de caracteres. Los argumentos son los valores que se pasan a la función cuando se llama, y deben coincidir en tipo y orden con los parámetros definidos. Por ejemplo:

procesarDatos(10, 20, "ejemplo")

En este caso, 10 y 20 se pasan como argumentos para los parámetros x y y, respectivamente, y "ejemplo" para z.

El valor de retorno de una función se especifica después de los paréntesis de los parámetros, y puede ser de cualquier tipo de datos válido en Go. Si una función no devuelve un valor, no es necesario especificar un tipo de retorno. Cuando una función retorna un valor, se utiliza la instrucción return para devolver el valor especificado:

func multiplicar(a int, b int) int {
    return a * b
}

Esta función multiplicar toma dos enteros como parámetros y devuelve el producto de ambos como un entero. La instrucción return finaliza la ejecución de la función y devuelve el valor al lugar donde la función fue llamada.

Es importante destacar que Go soporta el retorno de múltiples valores desde una función, lo cual es una característica que se explora más a fondo en otra sección de esta lección. En cuanto a los valores de retorno únicos, es esencial que el tipo del valor retornado coincida con el tipo especificado en la declaración de la función. Si una función está definida para retornar un valor, es obligatorio que incluya una instrucción return que efectivamente devuelva un valor del tipo correcto.

Go también permite el uso de valores de retorno nombrados para mejorar la claridad del código, aunque esta técnica se discute en detalle en una sección específica dedicada a valores de retorno múltiples y nombrados.

Valores de retorno múltiples y nombrados

Go es un lenguaje que soporta la capacidad de que las funciones devuelvan múltiples valores, lo cual es una característica que permite escribir código más expresivo y conciso. Al definir una función que retorna múltiples valores, se especifican los tipos de todos los valores de retorno entre paréntesis después de los parámetros de la función. Esta funcionalidad es particularmente útil para devolver un valor principal y un error, lo cual es un patrón común en Go.

Por ejemplo, una función que realiza una división y puede devolver un resultado junto con un error en caso de división por cero se define de la siguiente manera:

func dividir(dividendo, divisor float64) (float64, error) {
    if divisor == 0 {
        return 0, fmt.Errorf("división por cero")
    }
    return dividendo / divisor, nil
}

En este caso, la función dividir devuelve dos valores: el resultado de la división y un valor de tipo error. Si el divisor es cero, se devuelve un error utilizando fmt.Errorf. En el caso contrario, se devuelve el resultado de la división y un nil indicando que no hay error.

Al llamar a una función que retorna múltiples valores, se pueden asignar estos valores a variables individuales:

resultado, err := dividir(10, 2)
if err != nil {
    fmt.Println("Error:", err)
} else {
    fmt.Println("Resultado:", resultado)
}

En este ejemplo, resultado almacena el valor de la división y err almacena el posible error. Se verifica si err es distinto de nil para determinar si ocurrió un error durante la operación.

Además de los valores de retorno múltiples, Go permite usar valores de retorno nombrados, que son variables predefinidas como parte de la declaración de la función. Esto puede mejorar la legibilidad del código al documentar los propósitos de los valores de retorno directamente en la firma de la función. Aquí un ejemplo:

func calcular(a, b int) (suma int, producto int) {
    suma = a + b
    producto = a * b
    return
}

En este caso, suma y producto son valores de retorno nombrados. Al final de la función, un simple return es suficiente para devolver ambos valores, ya que se asignan automáticamente a las variables nombradas.

El uso de valores de retorno nombrados puede ser beneficioso para simplificar el código, especialmente en funciones más largas o complejas donde los valores de retorno tienen un significado particular. Sin embargo, es importante utilizarlos con moderación para evitar confusiones sobre el flujo de la función.

Aprende Go GRATIS online

Todas las lecciones de Go

Accede a todas las lecciones de Go y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Accede GRATIS a Go y certifícate

Certificados de superación de Go

Supera todos los ejercicios de programación del curso de Go y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender la sintaxis básica para definir funciones en Go.
  • Aprender a manejar parámetros y argumentos de funciones.
  • Implementar funciones con diferentes tipos de valores de retorno.
  • Utilizar funciones anónimas y de alto nivel.
  • Manejar valores de retorno múltiples y nombrados.