How to create your first Go program

How to create your first Go program

Go, often referred to as Golang due to its domain name, is a modern programming language developed by Google to address the needs of complex software engineering. Designed for efficiency, reliability, and ease of programming, Go has gained popularity for its simple syntax, powerful standard library, and its ability to handle concurrent operations through goroutines.

Introduction to Go

The inception of Go dates back to 2007, initiated by Robert Griesemer, Rob Pike, and Ken Thompson at Google. They aimed to create a language that combined the best features of existing languages while eliminating their complexities. Go was officially released to the public in 2009. Its design focuses on simplicity, fast compilation times, and efficient execution, making it an ideal choice for modern software development, including cloud-based applications, microservices, and large distributed systems.

One of the key advantages of Go is its robust standard library that offers extensive support for common tasks such as HTTP server implementation, text processing, and cryptography. Moreover, the Go ecosystem is rich with tools and libraries for virtually every need, further facilitated by its package management tool, go get.

Setting Up Your Go Development Environment

Before diving into Go programming, you’ll need to set up your development environment, which involves installing Go, configuring your system, and choosing an Integrated Development Environment (IDE) or code editor optimized for Go development.

Installing Go

To install Go, visit the official Go downloads page and select the package suitable for your operating system (Windows, macOS, or Linux). The website provides detailed installation instructions for each platform. Generally, the process involves downloading the installation package, running it, and following the on-screen instructions. For Linux users, Go can often be installed via the package manager with commands like sudo apt-get install golang on Debian-based distributions.

Configuring the Environment

After installing Go, you’ll need to set up the GOPATH and GOROOT environment variables. GOROOT is the location where Go is installed on your system, and GOPATH is the workspace for your Go projects. The Go installation will attempt to set these for you, but you may need to adjust them manually depending on your setup.

A typical Go workspace includes three directories at its root: src (where your Go source files reside), pkg (where package objects are stored), and bin (where executable files go). This structure is crucial for Go to locate your source code and dependencies.

Choosing an IDE

For Go development, you can choose from various IDEs and editors. Visual Studio Code (VS Code) with the Go extension is highly recommended for its Go support, including code completion, debugging, and linting. Other popular options include GoLand from JetBrains, which offers extensive features tailored for Go development, and Sublime Text with Go plugins for a lighter setup.

Your First Go Program: Hello World

Creating a “Hello, World!” program in Go is a traditional way to start your journey with a new programming language. It’s a simple yet effective way to ensure your development environment is correctly set up.

Creating Your Project Directory

First, create a new directory for your Go project within the src directory of your GOPATH. You can name it anything, for example, hello.

Writing the Hello World Code

Inside your project directory, create a file named main.go. Open this file in your chosen IDE or editor and write the following code:

package main

import "fmt"

func main() {
fmt.Println("Hello, World!")

This code defines a main package with an import statement for the fmt package, which is used for formatted I/O operations, similar to C’s printf and scanf. The main function, which is the entry point of a Go program, uses fmt.Println to print “Hello, World!” to the standard output.

Running Your Program

To run your program, open a terminal, navigate to your project directory, and execute the following command:

go run main.go

This command compiles your Go source file and runs the resulting binary, all in one step. You should see “Hello, World!” printed to the terminal, confirming that your Go environment is set up correctly and ready for development.

Understanding Go Basics

As you dive deeper into Go programming, you’ll encounter fundamental concepts that form the foundation of the language.

Data Types

Go is a statically typed language, meaning variables must be declared with a specific type. The basic data types in Go include integers (int, int8, int16, int32, int64), floating-point numbers (float32, float64), booleans (bool), and strings (string). Additionally, Go supports complex numbers, which can be useful in scientific computing.


Variables in Go are declared using the var keyword, followed by the variable
Functions in Go are building blocks that allow you to encapsulate code logic for reuse and clarity. Writing a simple function in Go begins with the func keyword, followed by the function name, a list of parameters (if any) enclosed in parentheses, an optional return type, and the function body enclosed in curly braces. For example, a function to add two integers might look like this:

func add(a int, b int) int {
return a + b

In Go, functions can return multiple values, which is particularly useful for returning a result along with an error status. For instance:

func divide(a float64, b float64) (float64, error) {
if b == 0.0 {
return 0.0, errors.New("division by zero")
return a / b, nil

Control Structures

Go’s control structures include if, for, and switch statements, enabling conditional and repetitive execution of code blocks. The if statement tests a condition:

if x > 0 {
fmt.Println("x is positive")

The for loop in Go serves several iteration purposes, from traditional for loops to while-style loops:

for i := 0; i < 10; i++ {

switch statements provide a cleaner way to write long if-else chains:

switch day {
case "Monday":
fmt.Println("Start of the work week")
case "Friday":
fmt.Println("It's a weekday")

Working with Go Modules

Modules in Go provide a way for managing dependencies in your Go projects. A module is a collection of Go packages stored in a file tree with a go.mod file at its root.

Creating a New Module

To initialize a new module, use the go mod init command followed by the module name, which is typically the repository location where your module will be stored:

go mod init

This command creates a go.mod file in your current directory, marking it as the root of a new module.

Adding External Packages

To add external packages to your module, simply import them in your Go files as needed. The Go toolchain automatically updates your go.mod to include those dependencies the next time you build or test your code. For manual adjustments, you can use:

go get package/import/path

Organizing Code into Packages

To keep your code organized and reusable, divide it into packages. Create a new directory for each package within your module, and place your Go files in these directories. Package names should be concise and clear, usually following the directory name they’re in.

Building and Compiling Your Go Program

Go compiles programs into binary executables, offering fast execution speeds and the convenience of distributing a single binary file.

Using go build

To compile your program, use the go build command. Running this command in your module’s root directory will compile the package defined there. To compile a specific package or a single Go file, specify its path:

go build ./...

Cross-Compiling for Different Platforms

Go supports cross-compilation, allowing you to build executables for platforms different from the one you’re using. Set the GOOS and GOARCH environment variables to target a specific operating system and architecture:

GOOS=linux GOARCH=amd64 go build

Basic Error Handling in Go

Error handling in Go is explicit, favoring clear error handling paths over exceptions.

The Error Type

Errors in Go are values that implement the error interface, which requires a Error() string method. The errors package provides basic functionalities for creating errors.

Writing Error-Handling Functions

When writing functions that can fail, make them return an error as their last return value. Check the returned error with:

if err != nil {
// handle error

Using defer, panic, and recover

Use defer for cleanup tasks; defer statements execute after the surrounding function returns. panic causes immediate program termination unless recovered with recover, which can only be done inside a deferred function.

Sharing is caring

Did you like what Rishabh Rao wrote? Thank them for their work by sharing it on social media.


No comments so far