Back to blog
Golang 2025-01-15

Getting Started with Go: A Practical Introduction for Web Developers

Go – usually called Golang – is the language I reach for whenever I need fast, reliable, maintainable backend services. As a Blockchain Full Stack Developer who spends a lot of time on performance-critical systems, Go has become an indispensable part of my toolkit.

Why Go?

Most high-level languages make you choose between productivity and performance. Go refuses that trade-off. It compiles to a single static binary, starts in milliseconds, and uses roughly ten times less memory than a comparable JVM service.

Key reasons I (MrBns / Mr Binary Sniper) use Go daily:

  • Simplicity – the language spec fits in a single afternoon of reading.
  • Concurrency built-in – goroutines and channels are first-class citizens.
  • Fast compilationgo build on a large codebase takes seconds, not minutes.
  • Great standard library – HTTP, JSON, crypto, and more, without a framework.
  • Single binary deploys – no runtime dependencies to manage on the server.

Your First Go Program

Create a file called main.go:

package main

import "fmt"

func main() {
    fmt.Println("Hello from MrBns!")
}

Compile and run:

go run main.go
# Hello from MrBns!

That is all there is to it. One file, one command.

Variables and Types

Go is statically typed, but type inference keeps the code concise:

// explicit type
var name string = "Mr Binary Sniper"

// inferred type (preferred in most cases)
alias := "MrBns"

// constants
const version = "1.0.0"

Control Flow

// if / else
if balance > 0 {
    fmt.Println("funded")
} else {
    fmt.Println("empty")
}

// for loop (Go has only one loop keyword)
for i := 0; i < 5; i++ {
    fmt.Println(i)
}

// range over a slice
tokens := []string{"HBAR", "ETH", "BTC"}
for index, token := range tokens {
    fmt.Printf("%d: %s\n", index, token)
}

Functions

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

// multiple return values – great for error handling
func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, fmt.Errorf("cannot divide by zero")
    }
    return a / b, nil
}

result, err := divide(10, 3)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("%.2f\n", result) // 3.33

Structs and Methods

Go uses structs instead of classes:

type Developer struct {
    Name   string
    Alias  string
    Skills []string
}

func (d Developer) Introduce() string {
    return fmt.Sprintf("I am %s, also known as %s.", d.Name, d.Alias)
}

me := Developer{
    Name:   "Mr Binary Sniper",
    Alias:  "MrBns",
    Skills: []string{"Go", "Blockchain", "Hedera", "TypeScript"},
}

fmt.Println(me.Introduce())

Next Steps

In the next article I will cover goroutines and channels – the feature that makes Go special for building concurrent systems like blockchain indexers and real-time API servers.

Go is the language that changed how I think about backend development. Whether you are building a REST API, a CLI tool, or a blockchain data pipeline, Go gets out of your way and lets you focus on the problem.

Go Golang backend MrBns Mr Binary Sniper