¿Hay problemas de simultaneidad que ve regularmente en el código de Go?

Un post breve, cuyo valor principal serán los comentarios (espero).

Cambié a Go recientemente. Hasta ahora he notado tres problemas:

  • time.Ticker no se detiene: línea saltada defer tick.Stop()

  • El comentario sobre el tipo de biblioteca dice que es "simultáneamente seguro", pero no dice exactamente cómo se pueden llamar a los métodos o desde qué rutinas. El valor predeterminado puede considerarse "se puede llamar a cualquier método de un tipo desde cualquier lugar en cualquier secuencia", pero en la práctica este no es el caso para la mayoría de los tipos seguros para subprocesos: tienen algún ciclo de vida (inicio-parada), o la semántica solo admite un escritor: mutante los métodos se pueden llamar desde una sola goroutine, o desde ambas.

  • El punto está relacionado y en parte se superpone con el anterior: hay un campo en la estructura sync.Mutex, pero no hay ningún comentario que explique qué protege y, lo más importante, por qué (por ejemplo, "el acceso a estos campos debe estar protegido, porque están escritos a partir de tal o cual goroutine y leídos desde goroutines net/httpservidor ").



    Tenga en cuenta que incluso en la fuente golang / go, que generalmente no se comenta (aparte de los documentales), todos los mutex en los subpaquetes net/tienen comentarios cortos.

Una pregunta para las personas que han estado escribiendo en Go más tiempo: ¿qué problemas observa regularmente durante las revisiones, al profundizar en el código antiguo o en el código de las bibliotecas?



Esta publicación es una traducción cruzada de una publicación en Reddit .




All Articles