Detector de condições de corrida e padrões seguros
Use a flag -race e evite condições de corrida nos dados
Detector de condições de corrida e padrões seguros é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
O que é uma condição de corrida de dados?
Uma condição de corrida de dados ocorre quando duas goroutines acessam simultaneamente a mesma posição de memória e pelo menos um dos acessos é uma escrita, sem sincronização. As condições de corrida de dados causam comportamento indefinido.
Ativação do detector de condições de corrida
Execute ou teste com -race para ativar o detector de condições de corrida integrado ao Go:
go run -race main.go
go test -race ./...Saída do detector de condições de corrida
Quando uma condição de corrida é detectada, o detector imprime rastreamentos de pilha das goroutines que mostram os acessos conflitantes e encerra o programa. A saída aponta para as linhas exatas envolvidas.
Custo de desempenho
O detector de condições de corrida adiciona uma sobrecarga de memória de aproximadamente 5 a 10 vezes e torna a execução de 2 a 20 vezes mais lenta. Execute-o na integração contínua e em ambientes de teste, não nas compilações de produção.
Padrões seguros comuns: operações atômicas
sync/atomic fornece operações sem bloqueio para contadores inteiros simples e ponteiros, evitando a sobrecarga de um mutex completo.
var counter int64
atomic.AddInt64(&counter, 1)
fmt.Println(atomic.LoadInt64(&counter))Padrões seguros comuns: propriedade por canal
Somente uma goroutine possui um valor por vez; a propriedade é transferida por meio de canais. Sem memória compartilhada, não há condições de corrida.
ch := make(chan []byte)
go func() { ch <- makeData() }()
data := <-ch // sole owner nowPadrões seguros comuns: dados imutáveis
Dados somente leitura compartilhados entre goroutines são seguros. Escreva apenas antes de iniciar as goroutines ou sincronize as escritas. Valores String e [N]T podem ser compartilhados com segurança após a criação.
Detecção de condições de corrida em testes
O detector de condições de corrida funciona com go test -race. Escreva testes que exercitem caminhos concorrentes — o detector identifica condições de corrida que testes sequenciais aparentemente corretos não detectam.
sync.atomic versus mutex
Use operações atômicas para atualizações de uma única variável (contadores, sinalizadores). Use mutexes para proteger invariantes que abrangem várias variáveis. Misturá-los sem uma análise cuidadosa é propenso a erros.
Relação de precedência
Go garante relações de precedência para operações de canal, Lock/Unlock de mutex e sync.Once.Do. As operações dentro da mesma goroutine são ordenadas sequencialmente.
Falso compartilhamento
Duas goroutines que atualizam posições de memória adjacentes (campos diferentes da mesma linha de cache) podem causar intensa disputa pelo cache. Preencha as estruturas com [64]byte se a análise de desempenho mostrar contenção em uma estrutura específica.
Verificação rápida
Qual sinalizador ativa o detector de condições de corrida do Go?
Recapitulação: detector de condições de corrida e padrões seguros
Pontos-chave:
- Execute sempre go test -race na integração contínua
- Padrões seguros: canais, mutexes, operações atômicas e dados imutáveis
- A saída do detector mostra as pilhas exatas das goroutines
- Não use -race nas compilações de produção
Aprenda Go com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 51
- Aulas
- 203
Perguntas Frequentes
A aula “Detector de condições de corrida e padrões seguros” é grátis?
Sim — o texto completo de “Detector de condições de corrida e padrões seguros” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Detector de condições de corrida e padrões seguros”?
Use a flag -race e evite condições de corrida nos dados Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Detector de condições de corrida e padrões seguros”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- sync.Mutex e sync.RWMutex
- sync.WaitGroup
- sync.Once e sync.Map
- Detector de condições de corrida e padrões seguros