Go 1.21 - Usando contexto sem cancelamento
Às vezes pode ser necessário usar o contexto apenas pelos valores, sem necessidade do cancelamento, até o Go 1.20 para solucionar isso era necessário criar uma struct
que retornava somente os valores do contexto, removendo a função de cancelamento.
A partir do Go 1.21, foi adicionado a função context.WithoutCancel
que cria um novo contexto sem a função de cancelamento.
Na prática, ficaria assim:
func doSomethingAsync(ctx context.Context) {
slog.InfoContext(ctx, "Running Async Process")
}
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
go doSomethingAsync(context.WithoutCancel(ctx))
}
Neste exemplo, o contexto ctx
é passado para a função doSomethingAsync
que não tem a necessidade de cancelamento, então usamos o context.WithoutCancel(ctx)
para criar um novo contexto sem o cancelamento.
Isso é útil para evitar que o contexto seja cancelado acidentalmente, ou para evitar que o contexto seja cancelado por um código que não deveria cancelá-lo.
Para mais informações, veja a documentação oficial .
Espero que tenha gostado, até a próxima!