También se pueden hacer funciones que anónimas que reciben parámetros. Solamente hay que agregar el valor del mismo en los paréntesis del final
z := func(n int) int {
return n * 2
}(5)
Introducción
Características esenciales de Go
Qué aprenderás y qué necesitas saber
Repaso general: variables, condicionales, slices y map
Repaso general: GoRoutines y apuntadores
Programación orientada a objetos
¿Es Go orientado a objetos?
Structs vs. clases
Métodos y funciones
Constructores
Herencia
Interfaces
Aplicando interfaces con Abstract Factory
Implementación final de Abstract Factory
Funciones anónimas
Funciones variadicas y retornos con nombre
Go Modules
Cómo utilizar los Go modules
Creando nuestro módulo
Testing
Testing
Code coverage
Profiling
Testing usando Mocks
Implementando Mocks
Concurrencia
Unbuffered channels y buffered channels
Waitgroup
Buffered channels como semáforos
Definiendo channels de lectura y escritura
Worker pools
Multiplexación con Select y Case
Proyecto: servidor con worker pools
Definiendo workers, jobs y dispatchers
Creando web server para procesar jobs
Conclusión
Continúa con el Curso de Go Avanzado
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 6
Preguntas 2
También se pueden hacer funciones que anónimas que reciben parámetros. Solamente hay que agregar el valor del mismo en los paréntesis del final
z := func(n int) int {
return n * 2
}(5)
package main
import (
"fmt"
"time"
)
// Funciones anónimas
func main() {
func() {
println("Hello")
}()
x := 5
y := func() int {
return x * 2
}()
fmt.Println(y)
c := make(chan int)
go func() {
fmt.Println("Starting function")
time.Sleep(2 * time.Second)
fmt.Println("Finishing function")
c <- 1
}()
fmt.Println(<-c)
}
un pequeño aporte relacionado a los antivirus, en caso alguien llegase a tener Kaspersky, Avast, entre otros, al momento de querer correr el archivo functions.go le arojara un falso positivo de Troyano, la solución más fácil es cambiarle el nombre de functions.go a main.go como se venía trabajando en los videos anteriores, y no habrá problemas al ejecutar el código
Una función anónima es una función definida internamente dentro de un bloque de código, y que no tiene identificador o nombre. Este tipo de funciones no son reutilizables como paquetes, siendo utilizadas únicamente dentro del bloque de código en el que son declaradas.
Una solución para no definir la función anónima dos veces, es declarandola pero no invocarla con los () al final, con esto podemos llamarla más adelante con la variable
package main
import "fmt"
func main() {
x := 5
y := func(num int) int {
return num * 2
}
z := 8
fmt.Println(y(x))
fmt.Println(y(z))
}
Código de la clase con comentarios explicando:
package functions
import (
"fmt"
"time"
)
// anon func's are not very recommended for DRY purposes. Only use it when it is necessary.
func anon() {
x := 5
// Anonymous func 1
y := func(x int) int {
return x * 2
}
fmt.Println("y anon func: ", y(x))
// Anonymous func 2 (it calls directly the param and calls itself)
z := func() int {
return x * 2
}()
fmt.Println("y anon func: ", z)
// 3rd Anonymous way: lambda Goroutine in a channel
// Create channel for blocking Gorouting until msg arrives
c := make(chan int)
// anon Goroutine
go func() {
// Exec func logic in Goroutine
fmt.Println("Starting Goroutine anon func...")
time.Sleep(1 * time.Second)
fmt.Println("Goroutine ended")
// Send int to c channel
c <- 1
}() // calls itself
// Waits until receiving the msg in c channel
<-c
}
func Functions() {
anon()
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?