De PHP para Go: O que mais me custou reprogramar
Escrevi PHP por sete anos. Usei Laravel durante cinco deles. Quando mudei para Go para liderar uma migração de um monólito Laravel para microsserviços, não vim com um tutorial. Vim com uma década de hábitos de PHP.
Aprender a sintaxe foi fácil. Você consegue ler Go em uma tarde. A parte difícil foi desaprender como eu pensava sobre código.
Aqui estão as mudanças mentais que levei meses para dominar:
Tratamento de Erros Em PHP, eu usava try/catch. Os erros muitas vezes viajavam invisivelmente para um manipulador global. Em Go, erros são valores. Uma função retorna um erro como seu último valor. Você deve tratá-lo ali mesmo. No início, isso parecia trabalho extra. Mais tarde, percebi que isso torna a falha visível. Quando um serviço falha, a mensagem de erro atua como um rastro de migalhas. Ela diz exatamente onde a falha ocorreu sem a necessidade de um stack trace massivo.
Memória e Estado O PHP utiliza um modelo shared-nothing. Cada requisição começa do zero. Vazamentos de memória importam menos porque o processo morre após a requisição. O Go é diferente. O processo permanece vivo por milhares de requisições. Isso significa que uma variável de nível de pacote é compartilhada entre todas as requisições. Se duas requisições tentarem escrever em um map ao mesmo tempo, o programa inteiro trava. No Go, você é o dono da concorrência. Você deve usar ferramentas como o race detector para manter tudo seguro.
O Papel do Contexto No PHP, a requisição é o limite. Quando a requisição termina, tudo para. No Go, nada para automaticamente. Se um cliente se desconectar, suas goroutines podem continuar rodando e desperdiçando recursos. Você deve usar context.Context para passar sinais de cancelamento através do seu código. É a espinha dorsal que mantém seu serviço saudável sob carga pesada.
Composição em vez de Herança O Laravel depende fortemente da extensão de classes base. Você adiciona funcionalidades herdando comportamentos. O Go não possui herança de classes. Ele utiliza interfaces que são satisfeitas implicitamente. Você define o que precisa onde o utiliza. Isso torna o código mais fácil de testar e substituir. Tive que matar meu instinto de estender tudo para escrever um bom código em Go.
Clareza em vez de Engenhosidade O PHP permite métodos mágicos e tipagem dinâmica. Você pode escrever um código engenhoso e expressivo. O Go é deliberadamente entediante. O compilador força você a usar uma formatação padrão e impede variáveis não utilizadas. No início, isso parecia restritivo. Agora, eu valorizo isso. O Go otimiza para a pessoa que lê o código, não para a que o escreve. Código entediante é fácil de consertar às 2 da manhã durante um incidente.
A parte difícil de aprender uma nova linguagem não é a nova sintaxe. São as velhas suposições que você carrega consigo.
Fonte: https://dev.to/econ__11/from-php-to-go-what-took-me-longest-to-rewire-2nfn
