Esta pagina se ve mejor con JavaScript habilitado

Funciones en Go

 ·  🎃 kr0m

En un artículo anterior ya vimos la bases del lenguaje Go basics , en esta ocasión profundizaremos en las funciones de Go.
- Declaración de funciones
- Múltiples valores de retorno
- Funciones como tipos
- Recursividad
- Métodos
- Funciones con entrada variable


Si eres nuevo en el mundo de Go te recomiendo los siguientes artículos anteriores:


Declaración de funciones:

Dentro del paréntesis se indican los tipos de las variables de entrada.

package main

import "fmt"

func main() {
	repeat("AlfaExploit", 5)
}

func repeat(word string, reps int) {
	for i := 0; i < reps; i++ {
		fmt.Println(word)
	}
}

Si la función retorna algún valor, el tipo del valor retornado se indicará fuera del paréntesis:

package main

import "fmt"

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

func main() {
    result := addition(3, 5)
    fmt.Println(result)
}

Múltiples valores de retorno:

Es similar a retornar un array de valores.

package main

import "fmt"

func divisionAndRemainder(dividend, divisor int) (int, int) {
    quotient := dividend / divisor
    remainder := dividend % divisor
    return quotient, remainder
}

func main() {
    quotient, remainder := divisionAndRemainder(10, 3)
    fmt.Println(quotient, remainder)
}

Funciones como tipos:

Se trata de utilizar una variable a modo de función, en este ejemplo la variable operation se comporta como si de la función multiplication se tratase.

package main

import "fmt"

type Operation func(int, int) int

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

func main() {
    var operation Operation = multiplication
    result := operation(2, 3)
    fmt.Println(result)
}

Recursividad:

package main

import "fmt"

func factorial(n int) int {
    if n <= 1 {
        return 1
    }
    return n * factorial(n-1)
}

func main() {
    result := factorial(5)
    fmt.Println(result)
}

Métodos:

Es como tener una estructura que además de tener variables en su interior, también tiene funciones.

package main

import "fmt"

type Rectangle struct {
    Base   int
    Height int
}

func (r Rectangle) Area() int {
    return r.Base * r.Height
}

func main() {
    rect := Rectangle{Base: 3, Height: 4} // Assign structure variable values
    // rect structure moreover has Area function available
    area := rect.Area() // Call structure function
    fmt.Println(area)
}

Funciones con entrada variable:

Número de variables de entrada variable.

package main

import "fmt"

func addition(nums ...int) int {
    result := 0
    for _, num := range nums {
        result += num
    }
    return result
}

func main() {
    total := addition(1, 2, 3, 4)
    fmt.Println(total)
    total = addition(1, 2, 3, 4, 5)
    fmt.Println(total)
}
Si te ha gustado el artículo puedes invitarme a un RedBull aquí