Creating a server command
So far, all of our service code lives inside the vault package. We are now going to use this package to create a new tool to expose the server functionality.
Create a new folder in vault called cmd, and inside it create another called vaultd. We are going to put our command code inside the vaultd folder because even though the code will be in the main package, the name of the tool will be vaultd by default. If we just put the command in the cmd folder, the tool would be built into a binary called cmd-which is pretty confusing.
Note
In Go projects, if the primary use of the package is to be imported into other programs (such as Go kit), then the root level files should make up the package and will have an appropriate package name (not main). If the primary purpose is a command-line tool, such as the Drop command (https://github.com/matryer/drop), then the root files will be in the main package.
The rationale for this comes down to usability; when importing a package...