Book Image

.Go Programming Blueprints - Second Edition

By : Mat Ryer
Book Image

.Go Programming Blueprints - Second Edition

By: Mat Ryer

Overview of this book

Go is the language of the Internet age, and the latest version of Go comes with major architectural changes. Implementation of the language, runtime, and libraries has changed significantly. The compiler and runtime are now written entirely in Go. The garbage collector is now concurrent and provides dramatically lower pause times by running in parallel with other Go routines when possible. This book will show you how to leverage all the latest features and much more. This book shows you how to build powerful systems and drops you into real-world situations. You will learn to develop high quality command-line tools that utilize the powerful shell capabilities and perform well using Go's in-built concurrency mechanisms. Scale, performance, and high availability lie at the heart of our projects, and the lessons learned throughout this book will arm you with everything you need to build world-class solutions. You will get a feel for app deployment using Docker and Google App Engine. Each project could form the basis of a start-up, which means they are directly applicable to modern software markets.
Table of Contents (19 chapters)
Go Programming Blueprints Second Edition
Credits
About the Author
Acknowledgments
About the Reviewer
www.PacktPub.com
Preface

Configuring Go


Go is now installed, but in order to use the tools, we must ensure that it is properly configured. To make calling the tools easier, we need to add our go/bin path to the PATH environment variable.

Note

On Unix systems, you should add export PATH=$PATH:/opt/go/bin (make sure it is the path you chose when installing Go) to your .bashrc file.

On Windows, open System Properties (try right-clicking on My Computer), and under Advanced, click on the Environment Variables button and use the UI to ensure that the PATH variable contains the path to your go/bin folder.

In a terminal (you may need to restart it for your changes to take effect), you can make sure this worked by printing the value of the PATH variable:

echo $PATH

Ensure that the value printed contains the correct path to your go/bin folder; for example, on my machine it prints as follows:

/usr/local/bin:/usr/bin:/bin:/opt/go/bin

Note

The colons (semicolons on Windows) between the paths indicate that the PATH variable is actually a list of folders rather than just one folder. This indicates that each folder included will be searched when you enter commands in your terminal.

Now we can make sure the Go build we just made runs successfully:

go version

Executing the go command (which can be found in your go/bin location) like this will print out the current version for us. For example, for Go 1.77.1, you should see something similar to the following:

go version go1.77.1 darwin/amd64

Getting GOPATH right

GOPATH is another environment variable to a folder (such as PATH in the previous section) that is used to specify the location for the Go source code and the compiled binary packages. Using the import command in your Go programs will cause the compiler to look in the GOPATH location to find the packages you are referring to. When using go get and other commands, projects are downloaded into the GOPATH folder.

While the GOPATH location can contain a list of colon-separated folders, such as PATH and you can even have a different value for GOPATH depending on which project you are working in it is strongly recommended that you use a single GOPATH location for everything, and this is what we will assume you will do for the projects in this book.

Create a new folder called go, this time in your Users folder somewhere perhaps in a Work subfolder. This will be our GOPATH target and is where all the third-party code and binaries will end up as well as where we will write our Go programs and packages. Using the same technique you used when setting the PATH environment variable in the previous section, set the GOPATH variable to the new go folder. Let's open a terminal and use one of the newly installed commands to get a third-party package for us to use:

go get github.com/matryer/silk

Getting the silk library will actually cause this folder structure to be created: $GOPATH/src/github.com/matryer/silk. You can see that the path segments are important in how Go organizes things, which helps namespace projects and keeps them unique. For example, if you created your own package called silk, you wouldn't keep it in the GitHub repository of matryer, so the path would be different.

When we create projects in this book, you should consider a sensible GOPATH root for them. For example, I used github.com/matryer/goblueprints, and if you were to go get that, you would actually get a complete copy of all the source code for this book in your GOPATH folder!