Go (Golang) Cheat Sheet
Go (Golang) is a statically typed, compiled programming language designed for simplicity, performance, and built-in concurrency. This Go cheatsheet is an example-driven reference covering core syntax, data structures, interfaces, error handling, and concurrency primitives.
Basic Program Structure
package main
import "fmt"
func main() {
fmt.Println("Hello, Go")
}
Running & Building
go run main.go
go build
go build -o app
Variables
var a int = 10
var b = 20
c := 30
var (
x int = 1
y int = 2
)
Constants
const Pi = 3.14
const (
A = iota
B
C
)
Basic Types
int
int64
float64
bool
string
var s string = "text"
Control Flow
if
if x > 10 {
fmt.Println("large")
}
if v := x * 2; v > 10 {
fmt.Println(v)
}
switch
switch x {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
default:
fmt.Println("other")
}
Loops
for i := 0; i < 5; i++ {
fmt.Println(i)
}
for x > 0 {
x--
}
for {
break
}
Functions
func add(a int, b int) int {
return a + b
}
result := add(2, 3)
Multiple Return Values
func divide(a, b int) (int, int) {
return a / b, a % b
}
q, r := divide(10, 3)
Named Return Values
func sum(a, b int) (result int) {
result = a + b
return
}
Variadic Functions
func total(nums ...int) int {
sum := 0
for _, n := range nums {
sum += n
}
return sum
}
Arrays
var arr [3]int = [3]int{1, 2, 3}
Slices
numbers := []int{1, 2, 3}
numbers = append(numbers, 4)
sub := numbers[1:3]
Maps
m := map[string]int{
"a": 1,
"b": 2,
}
value, ok := m["a"]
Iteration
for i, v := range numbers {
fmt.Println(i, v)
}
for key, value := range m {
fmt.Println(key, value)
}
Structs
type Point struct {
X int
Y int
}
p := Point{X: 10, Y: 20}
Struct Methods
func (p Point) Sum() int {
return p.X + p.Y
}
func (p *Point) Move(dx, dy int) {
p.X += dx
p.Y += dy
}
Interfaces
type Speaker interface {
Speak() string
}
type Person struct {
Name string
}
func (p Person) Speak() string {
return p.Name
}
Empty Interface
var v interface{} = 10
switch t := v.(type) {
case int:
fmt.Println("int")
case string:
fmt.Println("string")
}
Type Assertions
value := v.(int)
value, ok := v.(string)
Error Handling
func read() error {
return errors.New("failed")
}
if err := read(); err != nil {
fmt.Println(err)
}
Defer
func example() {
defer fmt.Println("done")
fmt.Println("working")
}
Panic & Recover
func mayFail() {
panic("error")
}
func safe() {
defer func() {
if r := recover(); r != nil {
fmt.Println("recovered")
}
}()
mayFail()
}
Goroutines
go fmt.Println("running concurrently")
go func() {
fmt.Println("anonymous goroutine")
}()
Channels
ch := make(chan int)
go func() {
ch <- 42
}()
value := <-ch
Buffered Channels
ch := make(chan int, 2)
ch <- 1
ch <- 2
Range Over Channels
for v := range ch {
fmt.Println(v)
}
Select
select {
case v := <-ch:
fmt.Println(v)
default:
fmt.Println("no value")
}
Mutex
import "sync"
var mu sync.Mutex
mu.Lock()
mu.Unlock()
WaitGroup
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
fmt.Println("done")
}()
wg.Wait()
File I/O
import "os"
data, _ := os.ReadFile("file.txt")
os.WriteFile("file.txt", []byte("text"), 0644)
JSON
import "encoding/json"
type User struct {
Name string
Age int
}
b, _ := json.Marshal(User{Name: "A", Age: 20})
var u User
json.Unmarshal(b, &u)