Executando verificação de segurança...
3

Channels Bufferizados em GO

Você sabia que um channel na linguagem golang pode ser bufferizado?

-"Beleza, mas o que diabos é um channel e o que é bufferizar?"

Haha! Calma que já te explico! O tipo Chan (de Channel) é um tipo derivado na linguagem de Go que remete a uma estrutura de dados que por sua vez serve para transitar valores entre as go routines dentro da linguagem, é preciso usar a função make() para criar este tipo, que retornará uma referência para esse tipo.

sua sintaxe é a seguinte:

channel := make(chan int, 10)

O primeiro parâmetro desta função é o tipo que queremos criar, que é um canal de inteiro, o segundo é o tamanho do buffer que este channel terá.

A imagem abaixo nos da uma ótima analogia, pense que um channel bufferizado é como uma caixa que pode armazenar diversos itens que um emissor fornece, do outro lado pode devolver item por item que um receptor irá consumir.

Agora um caso de uso real e que passei recentemente. Precisei processar um csv de 100 MIL linhas, no entanto, usar um unbuffered channel neste caso me ocasionou problemas de race condition e perde de dados pelo motivo de um unbuffered channel apenas armazenar um valor por vez a cada leitura ou escrita do canal.

Sendo assim a estratégia foi bufferizar esse canal para que não ocorresse a perda de dados… e as go routines que estavam lendo os dados desse channel prosseguiram com o comportamento adequado.

Este trecho foi tirado do livro Go Web Programming de Sau Sheong Chang

Buffered

Carregando publicação patrocinada...