Uma postagem curta, cujo valor principal serão os comentários (espero).
Mudei para Go recentemente. Até agora, observei três problemas:
time.Tickernão para: linha saltadadefer tick.Stop()O comentário sobre o tipo de biblioteca diz que é "simultaneamente seguro", mas não diz exatamente como os métodos podem ser chamados ou de quais goroutines. O padrão pode ser considerado "qualquer método de um tipo pode ser chamado de qualquer lugar em qualquer sequência", mas na prática este não é o caso para a maioria dos tipos thread-safe: eles têm algum ciclo de vida (start-stop) ou a semântica suporta apenas um escritor: mutating os métodos podem ser chamados de apenas um goroutine, ou ambos.
O ponto está relacionado e parcialmente sobreposto ao anterior: há um campo na estrutura
sync.Mutex, mas não há nenhum comentário explicando o que ele protege e, mais importante, por que (por exemplo, "o acesso a esses campos deve ser protegido, porque eles são escritos de tal e tal goroutine e lidos de goroutinesnet/httpservidor ").
Observe que mesmo no código-fonte golang / go, que geralmente não é comentado (além dos documentários), todos os mutexes em subpacotesnet/têm comentários curtos.
Uma pergunta para as pessoas que escrevem no Go há mais tempo - quais problemas você observa regularmente, durante as revisões, investigando o código antigo ou o código de bibliotecas?
Esta postagem é uma tradução de postagem cruzada de uma postagem no Reddit .