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)
}