The Go Blog

Godoc: документирование Go-кода

Andrew Gerrand
31 марта 2011

[Примечание, июнь 2022: Для актуальных рекомендаций по документированию Go-кода см. «Go Doc Comments».]

Проект Go относится к документации очень серьезно. Документация играет большую роль в доступности и сопровождаемости программного обеспечения. Конечно, она должна быть хорошо написана и точной, но также должна быть проста в написании и поддержке. В идеале, документация должна быть связана с самим кодом, чтобы она развивалась вместе с кодом. Чем проще для программистов создавать хорошую документацию, тем лучше для всех.

В этом отношении мы разработали инструмент документации godoc. В этой статье описывается подход godoc к документации, а также объясняется, как вы можете использовать наши соглашения и инструменты для написания хорошей документации для ваших собственных проектов.

Godoc анализирует исходный код Go — включая комментарии — и создает документацию в виде HTML или обычного текста. Конечный результат — документация, тесно связанная с кодом, который она описывает. Например, через веб-интерфейс godoc можно перейти от документации функции к её реализации одним кликом.

Godoc концептуально связан с Docstring Python и Javadoc Java, но его дизайн проще. Комментарии, читаемые godoc, не являются конструкциями языка (как в Docstring), ни они не должны иметь собственного синтаксиса, понятного машине (как в Javadoc). Комментарии godoc — это просто хорошие комментарии, которые вы хотели бы читать даже если бы godoc не существовал.

Соглашение простое: чтобы документировать тип, переменную, константу, функцию или даже пакет, напишите обычный комментарий непосредственно перед объявлением элемента, без пустой строки между комментарием и объявлением. Godoc затем будет отображать этот комментарий как текст рядом с элементом, который он описывает. Например, вот документация для функции Fprint пакета fmt:

<code>// Fprint formats using the default formats for its operands and writes to w.
// Spaces are added between operands when neither is a string.
// It returns the number of bytes written and any write error encountered.
func Fprint(w io.Writer, a ...interface{}) (n int, err error) {
  </code>

Обратите внимание, что этот комментарий представляет собой полное предложение, начинающееся с названия элемента, который он описывает. Это важное соглашение позволяет нам генерировать документацию в различных форматах, от обычного текста до HTML и UNIX man-страниц, а также делает её более читаемой, когда инструменты обрезают её для краткости, например, когда извлекают первую строку или предложение.

Комментарии к объявлениям пакетов должны содержать общее описание пакета. Эти комментарии могут быть короткими, как краткое описание пакета sort:

<code>// Package sort provides primitives for sorting slices and user-defined
// collections.
package sort
</code>

Они также могут быть подробными, как обзор пакета gob. Этот пакет использует другую конвенцию для пакетов, которым требуется большое количество вводной документации: комментарий к пакету размещается в отдельном файле, doc.go, который содержит только эти комментарии и объявление пакета.

При написании комментариев к пакету любого размера, учитывайте, что первая фраза будет отображаться в списке пакетов godoc.

Комментарии, которые не примыкают к объявлению уровня пакета, исключаются из вывода godoc, с одним замечательным исключением. Комментарии уровня пакета, начинающиеся со слова "BUG(кто)”, распознаются как известные ошибки, и включаются в раздел «Bugs» документации пакета. Часть «кто» должна быть именем пользователя, который может предоставить дополнительную информацию. Например, это известная проблема из пакета bytes:

<code>// BUG(r): The rule Title uses for word boundaries does not handle Unicode punctuation properly.
</code>

Иногда поле структуры, функция, тип или даже весь пакет становятся избыточными или ненужными, но должны сохраняться для совместимости с существующими программами. Чтобы обозначить, что идентификатор не следует использовать, добавьте абзац в комментарий к документации, начинающийся с «Deprecated:», за которым следует некоторая информация о прекращении поддержки.

Существует несколько правил форматирования, которые Godoc использует при преобразовании комментариев в HTML:

Обратите внимание, что ни одно из этих правил не требует от вас делать что-либо необычное.

На самом деле, лучшее в минимальном подходе godoc — это то, насколько просто его использовать. В результате большинство кода на Go, включая всю стандартную библиотеку, уже соответствует этим соглашениям.

Ваш собственный код может предоставлять хорошую документацию просто благодаря наличию комментариев, описанных выше. Любые пакеты Go, установленные внутри $GOROOT/src/pkg и любые рабочие пространства GOPATH уже будут доступны через командную строку и HTTP-интерфейсы godoc, и вы можете указать дополнительные пути для индексации с помощью флага -path или просто выполнив команду "godoc ." в каталоге исходного кода. См. документацию godoc для получения дополнительных сведений.

Следующая статья: Introducing Gofix
Предыдущая статья: Gobs of data
Индекс блога

GoRu.dev Golang на русском

На сайте представлена адаптированная под русский язык документация языка программирования Golang