Go Academy · Lección

Detector de condiciones de carrera y patrones seguros

Uso del indicador -race y prevención de carreras de datos

Lección 4 de 413 pasos

Detector de condiciones de carrera y patrones seguros es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

¿Qué es una condición de carrera de datos?

Una condición de carrera de datos ocurre cuando dos goroutines acceden simultáneamente a la misma ubicación de memoria y al menos uno de los accesos es de escritura, sin sincronización. Las carreras de datos provocan un comportamiento indefinido.

Activación del detector de carreras

Ejecute o pruebe con -race para activar el detector de carreras integrado en Go:

go run -race main.go
go test -race ./...

Salida del detector de carreras

Cuando se detecta una carrera, el detector imprime las pilas de llamadas de las goroutines que muestran los accesos en conflicto y termina el programa. La salida señala las líneas exactas implicadas.

Coste de rendimiento

El detector de carreras añade una sobrecarga de memoria de ~5-10× y hace que la ejecución sea ~2-20× más lenta. Ejecútelo en CI y en entornos de prueba, no en compilaciones de producción.

Patrones seguros comunes: operaciones atómicas

sync/atomic proporciona operaciones sin bloqueos para contadores enteros y punteros sencillos, evitando la sobrecarga de un mutex completo.

var counter int64
atomic.AddInt64(&counter, 1)
fmt.Println(atomic.LoadInt64(&counter))

Patrones seguros comunes: propiedad mediante canales

Solo una goroutine es propietaria de un valor en cada momento; la propiedad se transfiere mediante canales. Al no haber memoria compartida, no se producen carreras.

ch := make(chan []byte)
go func() { ch <- makeData() }()
data := <-ch // sole owner now

Patrones seguros comunes: datos inmutables

Los datos de solo lectura compartidos entre goroutines son seguros. Escriba en ellos únicamente antes de iniciar las goroutines o sincronice las escrituras. Los valores String y [N]T se pueden compartir de forma segura después de crearlos.

Detección de carreras en las pruebas

El detector de carreras funciona con go test -race. Escriba pruebas que ejerciten las rutas concurrentes; el detector identifica carreras que las pruebas secuenciales aparentemente correctas no detectan.

sync.atomic frente a mutex

Utilice atómicos para actualizaciones de una sola variable (contadores, indicadores). Utilice mutexes para proteger invariantes que abarcan varias variables. Mezclarlos sin un análisis cuidadoso puede provocar errores.

Happens-before

Go garantiza relaciones happens-before para las operaciones de canales, Mutex Lock/Unlock y sync.Once.Do. Las operaciones dentro de la misma goroutine se ordenan secuencialmente.

Falsa compartición

Dos goroutines que actualizan posiciones de memoria adyacentes (campos diferentes de la misma línea de caché) pueden provocar una contención excesiva de la caché. Añada relleno a las estructuras con [64]byte si el perfilado muestra contención en una estructura concreta.

Comprobación rápida

¿Qué indicador activa el detector de carreras de Go?

Repaso: detector de carreras y patrones seguros

Puntos clave:

  • Ejecute siempre go test -race en CI
  • Patrones seguros: canales, mutexes, atómicos y datos inmutables
  • La salida del detector muestra las pilas exactas de las goroutines
  • No utilice -race en compilaciones de producción
Gratis para empezar

Aprende Go con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
51
Lecciones
203

Preguntas frecuentes

¿La lección «Detector de condiciones de carrera y patrones seguros» es gratis?

Sí — el texto completo de «Detector de condiciones de carrera y patrones seguros» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Detector de condiciones de carrera y patrones seguros»?

Uso del indicador -race y prevención de carreras de datos Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Detector de condiciones de carrera y patrones seguros»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. sync.Mutex y sync.RWMutex
  2. sync.WaitGroup
  3. sync.Once y sync.Map
  4. Detector de condiciones de carrera y patrones seguros
← Volver a Go Academy