Go 101 Continued

  • The simplest Go program:

    package main
    
    func main() {
    }
    
  • The first line package main specifies the package name (main here) of the containing source file.

    I just don’t understand this statement.

  • Let me go back to the other book I was reading (Go in action). There I found the following statement:

    • For the build tools to produce an executable, the function main must be declared, and it becomes the entry point for the program.
    • Function main is located in a package called main. If your main function doesn’t exist in package main, the build tools won’t produce an executable.
    • Packages define a unit of compiled code and their names help provide a level of indirection to the identifiers that are declared inside them, just like a namespace. This makes it possible to distinguish identifiers that are declared with exactly the same name in the different packages you import.
  • I am not sure if I understand the idea of packages in Go yet. What I think is happening is that the first line of a .go file declares its place in overall structure of the code.

  • Looking at chapter 3 of Go In Action, I find the following:

    • All Go programs are organized into groups of files called packages.
    • This is done so that code can be included in other projects as smaller reusable pieces.
    • All .go files must declare the package that they belong to as the first line of the file excluding whitespace and comments.
    • Packages are contained in a single directory. You may not have multiple packages in the same directory, nor may you split a package across multiple directories. This means that all .go files in a single directory must declare the same package name.
    • The package name main designates to the Go command that this package is intended to be compiled into a binary executable. All of the executable programs you build in Go must have a package called main.

Run Go Programs

  • You can run a .go file by the command go run simplest-go-program.go. This will compile your .go file and return any syntax errors encountered.
  • The go run command is not the recommended way to compile large Go projects. For larger Go projects you need to run the go build or the go install commands.
  • Go project supporting Go modules needs a go.mod file located in the root folder of that project. The go.mod file can be generated by the go mod init subcommand.

Some go Subcommands

  • go vet: checks code for possible logical errors.
  • go fmt: formats Go source code with a consistent coding style.
  • go test: runs tests and benchmarks.
  • go doc: opens Go documentation in terminal windows.
  • go mod init example.com/myproject: generates a go.modfile in the current directory. This turns the current directory into the root directory of a module called example.com/myproject.
  • go mod tidy: adds missing module dependencies into and removes unused module dependencies from the go.mod file by analyzing all the source code of the current project.