/
non_blocking_channel_operations.go
37 lines (31 loc) · 1.08 KB
/
non_blocking_channel_operations.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main
import (
"fmt"
"time"
)
func main() {
// Criando um canal sem bloqueio para atualização de estoque
stockUpdateCh := make(chan int, 1)
// Iniciando uma goroutine para processar as atualizações de estoque
go func() {
for productId := range stockUpdateCh {
// Simulando uma atualização de estoque
fmt.Printf("Atualizando estoque do produto %d...\n", productId)
time.Sleep(2 * time.Second)
fmt.Printf("Estoque do produto %d atualizado\n", productId)
}
}()
// Realizando uma venda e atualizando o estoque do produto
productId := 123
fmt.Printf("Realizando venda do produto %d...\n", productId)
time.Sleep(time.Second)
// Enviando uma mensagem para o canal sem bloqueio de atualização de estoque
select {
case stockUpdateCh <- productId:
fmt.Printf("Mensagem de atualização de estoque para o produto %d enviada com sucesso\n", productId)
default:
fmt.Printf("Falha ao enviar mensagem de atualização de estoque para o produto %d\n", productId)
}
// Finalizando a venda
fmt.Printf("Venda do produto %d realizada com sucesso\n", productId)
}