Por que a documentação é importante para um projeto Go?
Documentação não é apenas uma formalidade, mas um elemento-chave para o sucesso de um projeto Go. No ecossistema Go (Golang), a cultura de documentação está incorporada no nível das ferramentas: o utilitário godoc gera automaticamente documentação a partir de comentários no código. Isso significa que todo desenvolvedor Go deve escrever comentários claros e estruturados para que seu código seja acessível a outros.
Neste artigo, vamos abordar como escrever documentação de qualidade para um projeto Go, usando as melhores práticas e ferramentas padrão. Você aprenderá como documentar pacotes, funções, tipos e exemplos para que seu código não seja apenas funcional, mas também compreensível.
Fundamentos da documentação em Go: godoc e comentários
Como o godoc funciona
A ferramenta godoc analisa o código-fonte Go e extrai comentários que vêm imediatamente antes das declarações de pacotes, funções, tipos, variáveis e constantes. Esses comentários são transformados em páginas HTML, que podem ser visualizadas localmente ou publicadas em pkg.go.dev.
Regras para escrever comentários
- Comentário do pacote — deve começar com
// Package nomee descrever o propósito do pacote. Geralmente é colocado no arquivodoc.goou no início de qualquer arquivo do pacote. - Comentário da função — começa com o nome da função (com letra maiúscula) e descreve o que a função faz, seus parâmetros e valores de retorno.
- Comentário do tipo — descreve a struct ou interface, seus campos e métodos.
- Formato — os comentários são escritos em inglês ou português (recomenda-se inglês para projetos públicos), cada frase deve ser completa.
Exemplo de documentação correta
// Package calculator provides basic arithmetic operations.package calculator
// Add returns the sum of two integers.//// Example://// sum := Add(3, 4)// fmt.Println(sum) // Output: 7func Add(a, b int) int { return a + b}
// Calculator represents a simple calculator with a memory.type Calculator struct { memory int}
// Store saves the given value into the calculator's memory.func (c *Calculator) Store(value int) { c.memory = value}Estrutura da documentação para pacotes e módulos
Documentação do pacote (Package documentation)
Cada pacote Go deve ter um comentário de pacote. O melhor é colocá-lo em um arquivo separado doc.go. Isso torna a documentação limpa e facilmente localizável.
// Package auth provides authentication and authorization utilities.//// It supports JWT tokens, OAuth2, and session-based authentication.//// For a quick start, see:// - NewJWTService for JWT authentication// - NewOAuthService for OAuth2 integrationpackage authDocumentação de identificadores exportados
Todas as funções, tipos, constantes e variáveis exportadas (com letra maiúscula) devem ter um comentário. As não exportadas são opcionais, mas para lógica complexa também vale a pena documentá-las.
- Funções: descreva o que a função faz, seus parâmetros e valores de retorno. Se a função pode retornar um erro, indique em quais condições.
- Tipos: descreva o propósito do tipo, seus campos (se for uma struct) e métodos principais.
- Constantes e variáveis: se não forem óbvias, adicione uma breve descrição.
Exemplo para um tipo complexo
// User represents a registered user in the system.type User struct { // ID is the unique identifier of the user. ID int
// Email is the user's email address. Must be unique. Email string
// Role defin