-
O autor é um ornitorrinco
- Descartar o autor como incompetente para ignorar a crítica é uma forma preguiçosa de agir.
- Desenvolvedores juniores podem olhar para problemas com uma perspectiva nova, e esse é um motivo importante para contratá-los.
- O autor não é um desenvolvedor júnior e, por meio de experiências diversas, tem entendimento sobre design de linguagens.
-
Se a mamãe fuma, então deve estar tudo bem
- Seguir incondicionalmente as tecnologias usadas por outras empresas é ineficiente.
- Blogs técnicos têm o objetivo de fazer a imagem da empresa parecer melhor.
- O blog da Tailscale é honesto, mas é preciso muito esforço para resolver os problemas do Go.
-
Partes boas
- O runtime assíncrono e o coletor de lixo do Go são excelentes.
- Ferramentas como gerenciamento de pacotes, refatoração e compilação cruzada são fáceis de usar.
- Porém, os pontos fracos do Go não podem ser ignorados, e o problema é que o design da linguagem parece ter surgido por acaso.
-
Go é uma ilha
- O Go tem pouca interoperabilidade com outras linguagens.
- A toolchain do Go é peculiar, e não é possível usar linguagens assembly ou depuradores já existentes.
- Integrar com Go através dos limites da rede é a forma mais fácil.
-
Tudo ou nada (por isso, nada é feito)
- O Go pode deixar campos de structs sem inicialização.
- A ideia de que valores zero têm significado é ingênua e, em muitos casos, problemática.
- A cultura do Go tende a dizer para tomar cuidado, em vez de resolver o problema.
-
"Rust é perfeito e vocês são todos idiotas"
- Rust pode ser adotado gradualmente e se integra bem com outras linguagens.
- O sucesso do Rust se deve, em parte, ao fato de permitir a transição para uma linguagem segura.
- O Rust também tem problemas, mas eles estão sendo resolvidos gradualmente.
-
Usar Go como linguagem de protótipo/inicial
- O Go é visto como uma linguagem fácil de aprender, mas na prática exige muita experiência.
- Faltam recursos que deixem claro quando o código está errado.
- As desvantagens do Go aparecem com o tempo, e não é uma linguagem da qual se sai facilmente.
-
As mentiras sobre por que continuamos usando Golang
- Como outras pessoas usam, então deve ser bom para nós também
- Considerar aceitáveis, individual ou coletivamente, falhas no design da linguagem
- Achar que os problemas podem ser superados se tivermos cuidado
- Achar que, por ser fácil de escrever, também é fácil desenvolver software de produção
- Achar que, por a linguagem ser simples, tudo é simples
- Achar que sempre poderemos reescrever depois
2 comentários
Fico na dúvida se um amador que passou um período tão breve quanto um instante focado em Go deveria mesmo deixar um texto... mas Go é uma linguagem com vantagens e desvantagens muito claras, então parece haver razões bem definidas tanto para quem a escolhe quanto para quem a evita. Pessoalmente, acho que não faz muito sentido compará-la com Rust; o mais correto me parece compará-la com Kotlin (Java).
As goroutines de Go são realmente excelentes, mas não são magia. Especialmente em projetos pequenos de backend que usam apenas um MySQL, essa tal concorrência é bem complicada de gerenciar. Coisas como esgotamento de recursos do MySQL ou gerenciamento de pool, que em runtimes JS/TS você nem precisa pensar tanto, acabam sendo mais difíceis do que parecem. No fim, nessa situação o banco vira o gargalo, então parte da vantagem da concorrência do Go se perde. (o I/O assíncrono ou o event loop de runtimes JS/TS pode até ser mais adequado) Dá para perceber isso na hora se você jogar algo como
-c 100com uma ferramenta comohey.E embora haja um GC excelente, isso não significa que você possa sair por aí passando objetos só por ponteiro e ignorando completamente a limpeza depois. Tudo tem trade-offs, mas em Go também é melhor, sempre que possível, passar objetos pequenos por cópia de valor e deixar que sejam processados logo quando a função terminar. Talvez eu esteja preso a uma forma de pensar antiga, mas não dava para abordar ponteiros com tanta facilidade sob a ótica de eficiência como em C/C++.
Ter que retornar
errorem praticamente toda função e verificar isso toda vez comif err != nil {}é realmente chato, mas isso é uma vantagem. O custo é menor do quetry catch. E a keyworddefer, que faz um papel parecido comfinally {}, também é excelente. É ótimo não precisar ficar pensando no momento de liberar recursos. Também é muito bom que dê para montar um servidor backend excelente só com a biblioteca padrão (1.23 ou superior). Acima de tudo, o melhor é que, ao compilar para o SO de destino, não é necessário outro runtime nem instalação prévia.Não usei Go por tanto tempo assim, mas acho que já estou me alongando demais com opiniões muito pessoais, então vou parar por aqui. haha Eu gosto de Go, e gosto de outras linguagens também!
Opiniões no Hacker News
Há muitas críticas aos pontos fracos da linguagem Go, mas o tratamento explícito de erros não é uma delas. O tratamento de exceções adiciona uma camada de "mágica" em que é fácil cometer erros. Em projetos pessoais, prefiro Rust, mas em projetos grandes com desenvolvedores de diferentes níveis, a filosofia do Go é a abordagem de tratamento de erros mais sensata no mundo moderno.
Rust e Go são muito diferentes, e o meio-termo que as pessoas querem atualmente não existe.
Gosto de linguagens simples. Como tecnologia sempre envolve trade-offs, críticas equilibradas são importantes.
Fico me perguntando por que é tão importante criticar uma linguagem. As críticas não são escritas de forma construtiva.
Sempre que leio críticas ao Go, continuo achando que vou seguir usando Go.
Sempre que uso outras linguagens, sinto vontade de voltar para Go.
Eu estava procurando um Python melhor. Go era a escolha óbvia, mas eu não gostava da sintaxe.
Não sei por que Go e Rust são comparadas com tanta frequência. Faz mais sentido comparar com Java.