Learning GoLang in One Blog

Share this post on:

Go (Golang),developed by Google, is a modern language designed for simplicity, speed, and safe concurrency.

This expanded guide covers setup, syntax, modules, testing, HTTP APIs, JSON, concurrency, and practical patterns so you can start building real services.

Why Learn Go?

  • Small language surface → easier onboarding and consistent code reviews.
  • Static typing + fast compile times → tighter feedback loop than many dynamic languages.
  • First class concurrency (goroutines, channels) → straightforward parallelism at scale.
  • Great tooling: go fmt, go vet, go test, go mod, go doc.
  • Cloud native pedigree: Docker, Kubernetes, Terraform, Prometheus all use Go.

Install, Initialize, Build

Install from go.dev/dl, then verify:

go version                                                 

Create a module and a starter app:

mkdir hello && cd hello
go mod init example.com/hello 
cat > main.go <<'EOF'
package main 
import "fmt" func main() { fmt.Println("Hello, Go!") } EOF
go run .
go build -o app && ./app

Language Basics: Variables, Types, Control Flow

package main 
import "fmt"

func main() {
// declarations 
var a int = 42
b := 3.14	// type inferred 
const name = "Go"

// control flow
for i := 0; i < 3; i++ { fmt.Println("loop", i) }
if a > 40 { fmt.Println("big") } else { fmt.Println("small") } switch {
case a%2==0: fmt.Println("even") 
default: fmt.Println("odd")
}

Functions, Multiple Returns, and Errors

package main import (
"errors" "fmt" "strconv"
)

func parseInt(s string) (int, error) { i, err := strconv.Atoi(s)
if err != nil { return 0, fmt.Errorf("parse failed: %w", err) } return i, nil
}

func main() {
if v, err := parseInt("123"); err == nil { fmt.Println("ok:", v)
} else { fmt.Println("err:", err)
}
}

Structs, Methods, and Interfaces

package main import "fmt"

type User struct { Name string; Age int }

func (u User) Greet() string { return "Hi, I'm " + u.Name } type Greeter interface { Greet() string }
func Say(g Greeter) { fmt.Println(g.Greet()) }

func main() {
u := User{Name:"Asha", Age:28} Say(u)
}

Slices and Maps

nums := []int{1,2,3} 
nums = append(nums, 4)
m := map[string]int{"apples":3}
m["bananas"] = 5

JSON: Marshal and Unmarshal

type Product struct { ID int `json:"id"`; Name string `json:"name"` } p := Product{ID:1, Name:"Widget"}
b, _ := json.Marshal(p) // to JSON var q Product
_ = json.Unmarshal(b, &q;) // from JSON

HTTP Server in 15 Lines

package main import (
"encoding/json" "log" "net/http"
)
type Ping struct { Message string `json:"message"` } func main() {
http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(Ping{Message:"pong"})
})
log.Println("listening :8080") log.Fatal(http.ListenAndServe(":8080", nil))
}

File I/O Essentials

data := []byte("hello\n")
_ = os.WriteFile("out.txt", data, 0644) b, _ := os.ReadFile("out.txt") fmt.Printf("%s", b)

Concurrency with Goroutines

func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { results <- j*j }
}

func main() {
jobs := make(chan int, 5) results := make(chan int, 5)
for w:=1; w<=3; w++ { go worker(w, jobs, results) } for j:=1; j<=5; j++ { jobs <- j }
close(jobs)
for i:=0; i<5; i++ { fmt.Println(<-results) }
}

Channels: Synchronization & Messaging

done := make(chan struct{})
go func(){ /* work */ close(done) }()

select {
case <-done: fmt.Println("finished")
case <-time.After(time.Second): fmt.Println("timeout")
}

Testing with go test

// file: calc.go

package calc; func Add(a,b int) int { return a+b }

// file: calc_test.go

package calc; import "testing"

func TestAdd(t *testing.T){ if Add(2,2)!=4 { t.Fatal("expected 4") } }

// run

go test ./... -v

Modules & Versioning

go mod init example.com/app

go get github.com/gorilla/mux@v1.8.1 go mod tidy

go list -m all

Conclusion

You now have a practical toolkit: language basics, modules, testing, JSON, HTTP servers, files, and robust concurrency. Use this as a starter reference for building APIs, workers, and CLIs in Go. In a follow up, we can add middleware patterns, context cancellation, graceful shutdown, and database access with sqlx or GORM.

Start experimenting with Go today. Whether you’re building APIs, CLIs, or scalable distributed systems, Go can be your go-to language for the future.

Stay tuned for Part 2, where we’ll dive into Go modules, error handling, testing, and building REST APIs

Share this post on:

Piyush Solanki

PHP Tech Lead & Backend Architect

10+ years experience
UK market specialist
Global brands & SMEs
Full-stack expertise

Core Technologies

PHP 95%
MySQL 90%
WordPress 92%
AWS 88%
  • Backend: PHP, MySQL, CodeIgniter, Laravel
  • CMS: WordPress customization & plugin development
  • APIs: RESTful design, microservices architecture
  • Frontend: React, TypeScript, modern admin panels
  • Cloud: AWS S3, Linux deployments
  • Integrations: Stripe, SMS/OTP gateways
  • Finance: Secure payment systems & compliance
  • Hospitality: Booking & reservation systems
  • Retail: E-commerce platforms & inventory
  • Consulting: Custom business solutions
  • Food Services: Delivery & ordering systems
  • Modernizing legacy systems for scalability
  • Building secure, high-performance products
  • Mobile-first API development
  • Agile collaboration with cross-functional teams
  • Focus on operational efficiency & innovation

Piyush is a seasoned PHP Tech Lead with 10+ years of experience architecting and delivering scalable web and mobile backend solutions for global brands and fast-growing SMEs.

He specializes in PHP, MySQL, CodeIgniter, WordPress, and custom API development, helping businesses modernize legacy systems and launch secure, high-performance digital products.

He collaborates closely with mobile teams building Android & iOS apps, developing RESTful APIs, cloud integrations, and secure payment systems. With extensive experience in the UK market and across multiple sectors, Piyush is passionate about helping SMEs scale technology teams and accelerate innovation through backend excellence.