Executando verificação de segurança...
8

O ponteiro de Go na verdade é uma referência explícita, veja mais: https://pt.stackoverflow.com/q/56470/101. Não tem ponteiros reais. Go tem um jeito muito próprio de chamar as coisas. C# tem referência implícita ou ponteiro.

Em C# o new é usado até em tipos por valor para demonstrar que está chamando um construtor, e não é para criar o tipo por referência, isso é feito com ref. Eu considero isso um erro e perde uma das grandes vantagens do new explicito que tem em outras linguagens revelando que a alocação será no heap e portanto custa mais caro, mas em C# o new pode alocar na stack. Go acerta mais nessa.

"Ninguém" mais usa o .NET Framework, ele ainda tem suporte, mas está sem atualizações há vários anos.

O GC do .NET também é concorrente e tem pausas mínimas na maiorfia das situações. Dependedo da carga um pode se sair melhor que outro, algumas pessoas já passaram por grandes proglemas com o GC de Go, ele não é perfeito como algumas pessoas gostam de vender.

Não existe um cenário tão claro de uso de cada tecnologia e o programador pode fazer mais diferença do que a linguagem. Tem momento que uma linguagem passa em benchmarks mais rápido que outras, depois fica um pouco pior em classificação mesmo melhorando o desempenho (é com na Formula 1, você pode melhorar, mas se os outros melhorarma mais você fica pra trás).

C# pode tranquilamente ser usada em APIs de alta performance, não é automático e sempre que Go se dará melhor nisso. Go tende usar menos memória mesmo.

Para CLI geralmente qualquer coisa serve, até a linguagem mais lenta que existe.

Não acho que necessariamente C# tem mais produtividade, pode acontecer em alguns casos.

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).

Carregando publicação patrocinada...
2

Fala maniero, muito obrigado pelo comentário!!

É exatamente esse tipo de troca que enriquece o aprendizado — principalmente quando a gente começa a explorar novas linguagens como é meu caso com Go.

Você trouxe ótimos pontos:

  • Realmente, o conceito de ponteiros em Go pode ser mais bem interpretado como referência explícita, já que não temos aritmética de ponteiros. Vou dar uma olhada nesse link do StackOverflow pra me aprofundar mais nesse detalhe técnico.

  • Sobre o new em C#, faz sentido o que você disse — ele não implica necessariamente alocação no heap, e sim a chamada de um construtor, inclusive para tipos por valor. Esse tipo de nuance é muito legal de entender melhor, e confesso que ainda não tinha parado pra olhar com essa profundidade.

  • E sim: o GC do .NET realmente evoluiu muito, inclusive com coleta concorrente. O que tentei trazer foi uma visão mais introdutória, mas essa contextualização de que nenhum GC é perfeito e que o cenário muda com carga e contexto é essencial.

  • A parte sobre “cenários ideais” de uso foi mais uma provocação didática do que uma verdade absoluta — e concordo plenamente com a analogia da Fórmula 1! 😄 No fim das contas, o dev faz a diferença com o que tem na mão.

Vou levar seus comentários como oportunidade de revisão e aprofundamento. Valeu demais por compartilhar sua visão com tanto conteúdo. Tamo junto 🙌