Un petit post, dont la valeur principale sera les commentaires (j'espère).
Je suis passé à Go assez récemment. Jusqu'à présent, j'ai noté trois problèmes:
time.Ticker
ne s'arrête pas: ligne sautéedefer tick.Stop()
Le commentaire sur le type de bibliothèque dit qu'il est "concurremment sûr", mais ne dit pas exactement comment les méthodes peuvent être appelées ou à partir de quelles goroutines. La valeur par défaut peut être considérée comme "toute méthode d'un type peut être appelée de n'importe où dans n'importe quelle séquence", mais en pratique ce n'est pas le cas pour la plupart des types thread-safe: soit ils ont un certain cycle de vie (start-stop), soit la sémantique ne prend en charge qu'un seul scripteur: la mutation Les méthodes peuvent être appelées à partir d'une seule goroutine, ou des deux.
Le point est lié et en partie recoupé avec le précédent: il y a un champ dans la structure
sync.Mutex
, mais il n'y a pas de commentaire expliquant ce qu'il protège, et surtout pourquoi (par exemple, «l'accès à ces champs doit être protégé, car ils sont écrits à partir de telle ou telle goroutine et lus depuis des goroutinesnet/http
serveur ").
Notez que même dans le source golang / go, qui n'est généralement pas commenté (à l'exception des documents documentaires), tous les mutex des sous-packagesnet/
ont de courts commentaires.
Une question pour les personnes qui écrivent dans Go plus longtemps - quels problèmes remarquez-vous régulièrement, lors des révisions, en explorant l'ancien code ou le code des bibliothèques?
Cet article est une traduction croisée d'un article sur Reddit .