Currently, the tools in the official Go Toolchain (called Go Toolchain later) are the most used tools to develop Go projects. In Go 101 article series, all examples are compiled and verified with the standard Go compiler provided in Go Toolchain.
This article will introduce how to setup the Go development environment
and how to use the go
command provided in Go Toolchain.
Some other tools out of Go Toolchain will also be introduced.
Please download Go Toolchain and install it by following the instructions shown in the download page.
We can also use the tool GoTV to manage installations of multiple Go toolchain versions and use them harmoniously and conveniently.
The version of a Go Toolchain release is consistent with the highest Go language version the release supports. For example, Go Toolchain 1.23.x supports all Go language versions from 1.0 to Go 1.23.
The path to the bin
subfolder in Go Toolchain installation root path
must be put in the PATH
environment variable to execute the tools
(through the go
command) provided in Go Toolchain without inputting their full paths.
If your Go Toolchain is installed through an installer or with a package manager, the path to
the bin
subfolder may have been already set in the PATH
environment variable automatically for you.
The recent Go Toolchain versions support a feature called modules to manage project dependencies. The feature was introduced experimentally in version 1.11 and has been enabled by default since version 1.16.
There is an environment variable,GOPATH
, we should be aware of,
though we don't need to care too much about it.
It is defaulted to the path to the go
folder under the home directory of the current user.
The GOPATH
environment variable may list multiple paths if it is specified manually.
Later, when the GOPATH
folder is mentioned, it means the folder at
the first path in the GOPATH
environment variable.
pkg
subfolder under the GOPATH
folder is
used to store cached versions of Go modules (a Go module is a collection of Go packages)
depended by local Go projects.
GOBIN
environment variable which controls
where the Go program binary files generated by the go install
subcommand will be stored.
The value of the GOBIN
environment variable is defaulted to
the path to bin
subfolder under the GOPATH
folder.
The GOBIN
path should be set in the PATH
environment variable if you would run the generated Go program binary files
without specifying their full paths.
Let's write a simple example and learn how to run simple Go programs.
The following program is the simplest Go program.package main
func main() {
}
The words package
and func
are two keywords.
The two main
words are two identifiers.
Keywords and identifiers are introduced in
a coming article.
The first line package main
specifies the package name
(main
here) of the containing source file.
The second line is a blank line for better readability.
The remaining code declares a function
which is also called main
.
This main
function in a main
package
specifies the entry point of a program.
(Note that some other user code might be executed
before the main
function gets invoked.)
Go Toolchain requires that Go source code file
to have the extension .go
.
Here, we assume the above source code is saved in a file
named simplest-go-program.go
.
$ go run simplest-go-program.go
Nothing is output? Yes, this program outputs nothing.
If there are some syntax errors in the source code, then these errors will be reported as compilation errors.
If multiple source files are in themain
package of a program,
then we should run the program with the following command
$ go run .
Note,
go run
command is not recommended to compile and run large Go projects.
It is just a convenient way to run simple Go programs, like the ones in the Go 101 articles.
For large Go projects, please use the commands go build
or go install
to build then run executable binary files instead.
go.mod
file located in the root folder
of that project. The go.mod
file can be generated by the go mod init
subcommand (see below).
_
or .
are ignored by Go Toolchain.
go
Subcommands
The three commands, go run
, go build
and go install
,
only output code syntax errors (if any).
They don't (try to) output code warnings (a.k.a., possible code logic mistakes).
We can use the go vet
command to check and report such warnings.
We can (and should often) use the go fmt
command to format Go source code
with a consistent coding style.
We can use the go test
command to run tests and benchmarks.
We can use the go doc
command to view Go documentation in terminal windows.
go mod init example.com/myproject
command is used to
generate a go.mod
file in the current directory, which will be viewed
as the root directory of a module called example.com/myproject
.
The go.mod
file will be used to record module dependencies. We can edit
the go.mod
file manually or let the go
subcommands to update it.
go mod tidy
command is used to add missing module dependencies into and
remove unused module dependencies from the go.mod
file
by analyzing all the source code of the current project.
go get
command is used to add/upgrade/downgrade/remove a single dependency.
This command is used less frequently than the go mod tidy
command.
Since Go Toolchain 1.16, we can run go install example.com/program@latest
to install the latest version of a third-party Go program (into the GOBIN
folder).
Before Go Toolchain 1.16, the corresponding command is go get -u example.com/program
,
which has been deprecated now.
We can use the go help aSubCommand
command to view the help message for a specified sub command.
Run the go
command without any arguments to show the supported subcommands.
The Go 101 article series will not explain much more on how to use the tools provided in Go Toolchain. Please read the official documentation for details.
We could use the docs and source view tool Golds
(go101.org/golds
) to locally view the docs of a specified Go project.
This is not an official tool. It is developed by me (Tapir Liu).
Golds supports rich code reading experiences (such as listing type implementation relations).
After installing Golds, we can run golds std ./...
to view the docs of
standard packages and packages in the current folder.
For official Go documentations, please visit go.dev.
The Go 101 project is hosted on Github. Welcome to improve Go 101 articles by submitting corrections for all kinds of mistakes, such as typos, grammar errors, wording inaccuracies, description flaws, code bugs and broken links.
If you would like to learn some Go details and facts every serveral days, please follow Go 101's official Twitter account @zigo_101.
reflect
standard package.sync
standard package.sync/atomic
standard package.