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).