doc.go: a special file

There is an unofficial convention to write a special file, in each Go package, that will describe the purpose of this package. Almost like a README, but intended for developers only. This file is named doc.go, and is called a package header. You’ll find one in most packages you use, if you venture in there.

The doc.go file contains no Go code, only one uncommented line: the package. And before that line, a verbose description of what the package is about. This is where we can tell how to properly use the package, in which order to call functions, and what we shouldn’t forget to defer, if need be.

The comments prior to the package name should be a multiline comment, where the first line starts with Package pocketlog, in our example. The capital matters, for code linters. Write this file, with every piece of information you deem important for the callers of our library.

Package pocketlog exposes an API to log your work.
First, instantiate a logger with pocketlog.New, and giving it a threshold level.
Messages of lesser criticality won't be logged.
Sharing the logger is the responsibility of the caller.
The logger can be called to log messages on three levels:
  - Debug: mostly used to debug code, follow step-by-step processes
  - Info: valuable messages providing  insights to the milestones of a process
  - Error: error messages to understand what went wrong
package pocketlog

The go doc command

One of the tools Go is shipped with is the go doc command. We’ve already mentioned it earlier to inspect the contents of standard packages. This command will give you the documentation of a package or symbol that the go command can find in the subdirectories. There is a minor limitation: go doc won’t go looking on the internet - it’s a local tool. This means that, in order to use it, you need to be working inside a project (with a go.mod file) for which the dependencies will have been downloaded - something that is achieved silently by some IDEs, but that can always be done manually with a go mod download command. In our case, we retrieve the documentation of the pocketlog package, and of the New function in the pocketlog package by running go doc command