Junior — Middle
Pode dar um exemplo de métodos de trabalho com canais sem usar goroutines?
sobes.tech IA
Resposta da IA
Os canais em Go são geralmente usados para comunicação entre goroutines, mas também podem ser utilizados sem lançar goroutines adicionais, por exemplo, para transmissão de dados síncrona.
Exemplo:
package main
import "fmt"
func main() {
ch := make(chan int)
// Envio e recepção em um único thread (sem goroutines)
go func() {
ch <- 42
}()
val := <-ch
fmt.Println(val)
}
No entanto, neste exemplo, uma goroutine é usada para enviar, para evitar bloqueio. Se não usar goroutines de forma alguma, o envio e a recepção devem ocorrer sequencialmente, por exemplo:
package main
import "fmt"
func main() {
ch := make(chan int, 1) // Canal com buffer
ch <- 10 // Envia para o canal com buffer
val := <-ch // Recebe do canal
fmt.Println(val)
}
Aqui, o canal com buffer permite enviar um valor sem bloqueio, pois há espaço no buffer. Assim, métodos de trabalho com canais sem goroutines são possíveis ao usar canais com buffer e envio/recebimento sequencial.