Os agentes de programação com IA podem produzir código Go executável, mas isso não significa que usem as sintaxes mais recentes da linguagem ou os acréscimos mais novos à sua biblioteca padrão. Os padrões mais antigos de Go estão muito mais presentes nos dados de treinamento, enquanto os recursos mais recentes podem não aparecer nos dados nos quais o modelo se baseou. Para lidar com essa lacuna, a equipe da GoLand na JetBrains criou um projeto de código aberto chamado Modern Go Guidelines, que fornece aos agentes orientações práticas associadas à versão do Go declarada no projeto.
O que o projeto oferece?
As orientações abrangem recursos da linguagem e acréscimos úteis à biblioteca padrão nas versões do Go de 1.0 a 1.27, além dos padrões tratados pelo analisador go modernize. O agente não recebe orientações para versões mais recentes do que a versão usada no projeto. Se o arquivo go.mod contiver a diretiva go 1.25, o agente poderá usar as orientações do Go 1.25 e das versões anteriores, mas não receberá sugestões baseadas no Go 1.26 ou no Go 1.27.
Isso significa, de acordo com o exemplo apresentado no material, que o agente pode sugerir sync.WaitGroup.Go, introduzido no Go 1.25, mas não sugerirá errors.AsType, que exige o Go 1.26. Essa associação entre as orientações e a versão do projeto pretende reduzir a probabilidade de gerar código que exija uma versão mais recente do ambiente disponível, além de diminuir a quantidade de contexto desnecessário que o agente precisa ler.
Divulgação gradual em vez de carregar todo o contexto
O complemento inclui uma ferramenta de linha de comando chamada go-modern-guidelines e uma habilidade de instruções chamada use-modern-go. A ferramenta oferece dois comandos principais:
- list: exibe orientações curtas e relevantes para um arquivo Go ou para uma versão específica.
- explain: fornece uma explicação mais detalhada e um exemplo que compara o padrão antigo com a alternativa moderna.
As instruções recomendam que o agente execute o comando list para o arquivo em questão antes de modificá-lo e use explain quando precisar entender uma regra específica. É possível solicitar orientações para um arquivo como ./internal/worker/worker.go ou especificar diretamente a versão usando --go-version 1.27. A saída de list começa com as orientações aplicáveis mais recentes e inclui um identificador estável para cada regra, como sync_waitgroup_go, testing_t_context e json_omitzero.
Exemplos de padrões modernos
As orientações incluem exemplos práticos de substituição de padrões comuns por outros mais recentes, como usar slices.Contains em vez de um loop de busca escrito manualmente, e min e max em vez de comparações manuais, além de cmp.Or em vez de uma sequência que escolhe o primeiro valor não zero.
Elas também explicam o uso de sync.WaitGroup.Go em vez de distribuir separadamente as operações Add, go e Done; o uso de errors.AsType para a correspondência de erros com segurança de tipos no Go 1.26 e posteriores; e o uso de new(value) quando é necessário um ponteiro para um valor no Go 1.26 e posteriores. No Go 1.27, as orientações apresentam strings.CutLast e bytes.CutLast como alternativas a LastIndex e ao fatiamento manual.
O exemplo de generic_methods, disponível desde o Go 1.27, mostra como mover uma operação genérica de uma função auxiliar no nível do pacote para um método do tipo quando a operação está naturalmente associada a esse tipo. O comando explain retorna uma explicação da regra com um exemplo de antes e depois e também pode explicar várias regras em uma única chamada.
O que muda na prática para os desenvolvedores?
O principal valor aqui não é atualizar automaticamente código antigo, mas fornecer ao agente uma referência pequena e específica durante a geração ou a modificação do código. O projeto se integra a ferramentas como go fix em vez de substituí-las: as orientações do Modern Go Guidelines ajudam o agente a começar com um padrão moderno, enquanto o go fix ajuda a atualizar padrões que já existem na base de código.
O complemento pode ser instalado a partir do marketplace de extensões ou de um repositório local. A integração exige que a cadeia de ferramentas do Go esteja no PATH. No primeiro uso, a integração instala a ferramenta de linha de comando por meio de go install e a armazena em um cache local, sem modificar o próprio projeto. O material apresenta comandos para adicionar o repositório como marketplace do Claude, instalar modern-go-guidelines e ativar /use-modern-go. Também menciona um caminho para testar um repositório local antes de publicá-lo ou atualizá-lo, com exemplos que incluem Claude e Codex.
Leitura da certi.news
O projeto aborda um problema prático no uso de agentes de inteligência artificial: a correção do código do ponto de vista da compilação não garante sua adequação à versão da linguagem nem sua adoção das melhores práticas disponíveis. Associar as orientações ao arquivo go.mod estabelece um limite técnico claro para o que o agente pode sugerir, enquanto a divulgação gradual reduz a sobrecarga causada por contexto de que ele não precisa. No entanto, a ferramenta não elimina a necessidade de revisão do desenvolvedor ou de testes; ela fornece regras e exemplos ao agente, e a fonte não demonstra que ela verifique de forma independente cada alteração produzida. Além disso, a cobertura anunciada chega ao Go 1.27, portanto as orientações para versões posteriores ainda precisarão ser adicionadas e atualizadas.