Sobes.tech
Junior — Middle

O que é executado primeiro na instrução de seleção: o processamento de dados do canal ou a leitura do contexto atual?

sobes.tech IA

Resposta da IA

Na instrução select em Go, a ordem de execução depende da prontidão dos canais e de outras operações. Se várias opções estiverem prontas ao mesmo tempo, uma delas é escolhida aleatoriamente.

Quanto à comparação entre o processamento de dados de um canal e a leitura de um contexto (context):

  • Se no select houver uma opção para leitura de um canal e outra para leitura do contexto (por exemplo, <-ctx.Done()), e ambas estiverem prontas, a escolha será aleatória.
  • Se apenas uma delas estiver pronta, ela será executada.

Portanto, não é possível dizer com certeza qual será executada primeiro — isso depende do estado dos canais e do contexto no momento da execução do select.

Exemplo:

select {
case data := <-ch:
    // processamento de dados do canal
case <-ctx.Done():
    // processamento de cancelamento do contexto
}

Se tanto ch quanto ctx.Done() estiverem prontos, a escolha será aleatória.