Godoc: documenting Go code
31 Mar 2011
Tags: godoc, technical

Andrew Gerrand

* Introduction

The Go project takes documentation seriously.
Documentation is a huge part of making software accessible and maintainable.
Of course it must be well-written and accurate,
but it also must be easy to write and to maintain.
Ideally, it should be coupled to the code itself so the documentation evolves
along with the code.
The easier it is for programmers to produce good documentation,
the better for everyone.

To that end, we have developed the [[https://golang.org/cmd/godoc/][godoc]] documentation tool.
This article describes godoc's approach to documentation,
and explains how you can use our conventions and tools to write good documentation
for your own projects.

Godoc parses Go source code - including comments - and produces documentation
as HTML or plain text.
The end result is documentation tightly coupled with the code it documents.
For example, through godoc's web interface you can navigate from a function's
[[https://golang.org/pkg/strings/#HasPrefix][documentation]] to its [[https://golang.org/src/pkg/strings/strings.go#L493][implementation]] with one click.

Godoc is conceptually related to Python's [[http://www.python.org/dev/peps/pep-0257/][Docstring]]
and Java's [[http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html][Javadoc]],
but its design is simpler.
The comments read by godoc are not language constructs (as with Docstring)
nor must they have their own machine-readable syntax (as with Javadoc).
Godoc comments are just good comments, the sort you would want to read even
if godoc didn't exist.

The convention is simple: to document a type,
variable, constant, function, or even a package,
write a regular comment directly preceding its declaration,
with no intervening blank line.
Godoc will then present that comment as text alongside the item it documents.
For example, this is the documentation for the `fmt` package's [[https://golang.org/pkg/fmt/#Fprint][`Fprint`]] function:

	// 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) {

Notice this comment is a complete sentence that begins with the name of
the element it describes.
This important convention allows us to generate documentation in a variety of formats,
from plain text to HTML to UNIX man pages,
and makes it read better when tools truncate it for brevity,
such as when they extract the first line or sentence.

Comments on package declarations should provide general package documentation.
These comments can be short, like the [[https://golang.org/pkg/sort/][`sort`]]
package's brief description:

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

They can also be detailed like the [[https://golang.org/pkg/encoding/gob/][gob package]]'s overview.
That package uses another convention for packages that need large amounts
of introductory documentation:
the package comment is placed in its own file,
[[https://golang.org/src/pkg/encoding/gob/doc.go][doc.go]],
which contains only those comments and a package clause.

When writing package comments of any size,
keep in mind that their first sentence will appear in godoc's [[https://golang.org/pkg/][package list]].

Comments that are not adjacent to a top-level declaration are omitted from godoc's output,
with one notable exception.
Top-level comments that begin with the word `"BUG(who)”` are recognized as known bugs,
and included in the "Bugs” section of the package documentation.
The "who” part should be the user name of someone who could provide more information.
For example, this is a known issue from the [[https://golang.org/pkg/bytes/#pkg-note-BUG][bytes package]]:

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

Sometimes a struct field, function, type, or even a whole package becomes
redundant or unnecessary, but must be kept for compatibility with existing
programs.
To signal that an identifier should not be used, add a paragraph to its doc
comment that begins with "Deprecated:" followed by some information about the
deprecation.
There are a few examples [[https://golang.org/search?q=Deprecated:][in the standard library]].

There are a few formatting rules that Godoc uses when converting comments to HTML:

- Subsequent lines of text are considered part of the same paragraph;
  you must leave a blank line to separate paragraphs.

- Pre-formatted text must be indented relative to the surrounding comment
  text (see gob's [[https://golang.org/src/pkg/encoding/gob/doc.go][doc.go]] for an example).

- URLs will be converted to HTML links; no special markup is necessary.

Note that none of these rules requires you to do anything out of the ordinary.

In fact, the best thing about godoc's minimal approach is how easy it is to use.
As a result, a lot of Go code, including all of the standard library,
already follows the conventions.

Your own code can present good documentation just by having comments as described above.
Any Go packages installed inside `$GOROOT/src/pkg` and any `GOPATH` work
spaces will already be accessible via godoc's command-line and HTTP interfaces,
and you can specify additional paths for indexing via the `-path` flag or
just by running `"godoc`."` in the source directory.
See the [[https://golang.org/cmd/godoc/][godoc documentation]] for more details.
