A partir do Go 1.22, a biblioteca padrão oferece melhor suporte a roteamento
- Antes era preciso lidar com o roteamento manualmente, mas agora é possível fazer isso de forma simples com
mux.HandleFunc
- Também é possível adicionar middleware de login para reforçar a segurança
Atenção com o roteador embutido: redirecionamento por causa da barra final
- Se você criar a rota
/records/, uma requisição para /records será redirecionada para /records/
- Isso pode fazer com que o corpo de uma requisição POST seja removido e ela seja alterada para uma requisição GET
- A solução é usar endpoints de API como
POST /records em vez de POST /records/
Geração automática de código de consulta ao banco de dados com sqlc
- Foi descoberto o sqlc, uma ferramenta que permite escrever consultas SQL sem precisar aprender um ORM
- Você escreve as consultas SQL e elas são convertidas automaticamente em código Go
- Assim, fica fácil escrever as consultas necessárias sem depender da documentação de um ORM
Dicas de otimização para sqlite
- Use um objeto de banco de dados dedicado apenas à escrita e configure
db.SetMaxOpenConns(1)
- Para aumentar a velocidade de leitura, use objetos de DB separados para escrita e leitura
- Duas tabelas que não precisam de JOIN podem ser colocadas em bancos separados e conectadas de forma independente
Configuração do limite de memória do GC no Go 1.19
- Ao executar projetos Go em VMs com relativamente pouca memória, como 256MB ou 512MB, surgiu um problema em que a aplicação continuava sendo encerrada por OOM
- Por causa da configuração padrão do coletor de lixo, é permitido alocar memória até o dobro do tamanho atual do heap
- No Go 1.19, foi adicionada uma forma de instruir a aplicação a executar o GC quando atingir um determinado uso de memória
- Depois de definir o limite de memória do GC em 250MB, a frequência de encerramentos por OOM diminuiu
export GOMEMLIMIT=250MiB
Por que criar sites com Go
- A implantação é simples com um único binário estático
- Há um servidor web embutido pronto para produção, então não é necessário configurar WSGI e similares
- O toolchain do Go é fácil de instalar e usar
- Enviar respostas HTTP é simples, o que facilita a manutenção do projeto
- A biblioteca padrão inclui
net/http, então é possível criar sites sem instalar bibliotecas adicionais
- Também é fácil realizar tarefas em nível de sistema
- Tudo parece ter sido feito para tornar o projeto fácil de lidar
Problemas que ainda não foram resolvidos
- Ainda há várias coisas que não foram muito exploradas em Go
- Renderização de templates HTML
- Implementação de um sistema de login real
- Implementação de CSRF
- Em geral, como ainda não se sabe bem como implementar recursos sensíveis à segurança, evita-se começar projetos que precisem de login/CSRF e semelhantes
É legal ver os novos recursos do Go
- Os dois recursos do Go mencionados neste texto (
GOMEMLIMIT e roteamento) foram adicionados nos últimos anos
- Parece que vale a pena prestar mais atenção às notas de lançamento das novas versões do Go
2 comentários
o
sqlcé realmente ótimoOpiniões no Hacker News
embednão tenha sido mencionado no post sobre desenvolvimento web em GoContextao loop de transação para permitir cancelamentosqlctem algumas limitações importantes e pequenos incômodos, então vale checar a lista de issues antes de usarGOMAXPROCScorretamente para evitar throttling de CPUGOMEMLIMITpode reduzir a preocupação com o GChtml/templateé estranho e tem muitos problemas, então é melhor não usarTemplmuxhá muito tempo, mas não tinha prestado atenção aos recursos das novas releasesnilfaz até tarefas simples ficarem complicadasBEGIN CONCURRENT