Free Online Course · Self-paced
Golang Tutorial for Beginners (Hands-On)
Free, complete Go (Golang) tutorial - install, syntax, types, control flow, structs, interfaces, generics, goroutines, channels, web servers, gRPC, databases, testing, and benchmarking. 100+ runnable lessons on Go 1.21+.
- 251 parts
- ~1719 min total
- Beginner to Advanced
- Updated May 2026
Go is the language that powers most modern cloud infrastructure - Docker, Kubernetes, Prometheus, Terraform, and most cloud-native control planes are written in it. This tutorial takes you from go install all the way to building production microservices, with examples tested on Go 1.21+.
We start with installation and modules, then walk through every fundamental (variables, types, control flow, functions), the type system (structs, methods, interfaces, generics), the famous concurrency model (goroutines, channels, contexts, mutexes), error handling, file I/O, JSON/YAML, networking, web frameworks (Gin, Fiber, Chi, Gorilla Mux), database integration (Postgres, MongoDB, Redis, DynamoDB), testing, benchmarking, fuzzing, cryptography, observability, and real-world architecture patterns. Every chapter is short and every snippet runnable.
Click Start the course to begin with installation, or jump to the chapter you need - Concurrency, Structs and Interfaces, and Networking, HTTP and Web Frameworks are the most-bookmarked. After this course, the natural next step is /kubernetes-operator-tutorial/ (writing operators in Go).
What you'll learn
- Install Go, manage GOPATH/modules, and write your first program
- Master syntax - variables, types, control flow, error returns, the comma-ok idiom
- Build structs, methods, interfaces (and the famous "accept interfaces, return structs" pattern)
- Use slices, maps, channels, and goroutines for concurrent, idiomatic Go
- Build HTTP / gRPC / WebSocket servers and integrate with Postgres, Redis, MongoDB
- Profile, benchmark, fuzz, and test Go code the right way
Prerequisites
- Go 1.21+ installed
- Comfortable on the command line
- Familiarity with at least one other programming language
Syllabus
19 chapters · 251 lessons · ~1719 min of reading
-
1 Install and Set Up 9 lessons
- Part 1 Install Go 1.21+ on Ubuntu 6 min read
- Part 2 Install Go on Windows 4 min read
- Part 3 Uninstall Go 10 min read
- Part 4 Upgrade your Go version 5 min read
- Part 5 Best IDE for Go 7 min read
- Part 6 Getting started with Go 12 min read
- Part 7 Hello World in Go 3 min read
- Part 8 GOPATH vs GOROOT 5 min read
- Part 9 Set the GOPATH variable 5 min read
-
2 Modules and Packages 13 lessons
- Part 10 Create a custom Go module 9 min read
- Part 11 Package layout and conventions 8 min read
- Part 12 Call a function from another package 5 min read
- Part 13 Import a local package 4 min read
- Part 14 Import a local package without GOPATH 4 min read
- Part 15 Import a struct from another file 6 min read
- Part 16 Import private repositories 4 min read
- Part 17 go get a specific version 4 min read
- Part 18 Remove an installed package 7 min read
- Part 19 List installed packages 4 min read
- Part 20 Underscore (_) in front of imports 3 min read
- Part 21 Fix: cannot find package even if GOPATH is set 4 min read
- Part 22 Fix: go.mod file not found 7 min read
-
3 Variables, Constants, Types 14 lessons
- Part 23 Global variables 7 min read
- Part 24 Variable scope 8 min read
- Part 25 Variable naming conventions 12 min read
- Part 26 Fix: declared and not used 3 min read
- Part 27 Integer types (int, int32, int64, uint) 8 min read
- Part 28 Convert int to int64 3 min read
- Part 29 Convert byte to int 4 min read
- Part 30 Convert float64 to int 3 min read
- Part 31 Type casting Coming soon
- Part 31 Convert bool to string 3 min read
- Part 32 Cast to string 6 min read
- Part 33 Array constants 3 min read
- Part 34 Declare constant maps 4 min read
- Part 35 What does & (ampersand) mean in Go? 4 min read
-
4 Strings 18 lessons
- Part 36 String.Contains() 14 min read
- Part 37 Compare strings 5 min read
- Part 38 Split a string 5 min read
- Part 39 Split and assign to variables 3 min read
- Part 40 String interpolation 7 min read
- Part 41 Multi-line strings 4 min read
- Part 42 Trim whitespace 6 min read
- Part 43 Trim leading and trailing spaces 3 min read
- Part 44 Padding and formatting 5 min read
- Part 45 Escape backslash in strings 2 min read
- Part 46 Remove backslash from string 3 min read
- Part 47 Tab characters in strings 5 min read
- Part 48 Convert string to uint8 6 min read
- Part 49 Convert bytes to string 10 min read
- Part 50 Test if a string is empty 6 min read
- Part 51 Base64 encode/decode 12 min read
- Part 52 strconv package 8 min read
- Part 53 URL encode/decode 6 min read
-
5 Control Flow 8 lessons
- Part 54 if / else 6 min read
- Part 55 Ternary equivalents in Go 7 min read
- Part 56 switch statement 12 min read
- Part 57 for loop (the only loop) 9 min read
- Part 58 while-loop pattern 11 min read
- Part 59 break and continue 7 min read
- Part 60 Iterate over an array 4 min read
- Part 61 Iterate over a slice in reverse 3 min read
-
6 Functions 17 lessons
- Part 62 Functions in Go 14 min read
- Part 63 Function parameters 5 min read
- Part 64 Default parameter values 3 min read
- Part 65 Optional parameters 6 min read
- Part 66 Variadic functions 9 min read
- Part 67 Functions as parameters 3 min read
- Part 68 Functions that accept multiple types 4 min read
- Part 69 Methods vs functions 7 min read
- Part 70 Function vs method 6 min read
- Part 71 Closures 5 min read
- Part 72 Anonymous functions 6 min read
- Part 73 Return multiple values 7 min read
- Part 74 defer keyword 7 min read
- Part 75 Pass by reference vs value 5 min read
- Part 76 Go pointers tutorial 11 min read
- Part 77 init() function 6 min read
- Part 78 init() execution order 5 min read
-
7 Arrays, Slices and Maps 22 lessons
- Part 79 Arrays and structs overview 15 min read
- Part 80 Pass an array to a function 4 min read
- Part 81 Pass a slice to a function 4 min read
- Part 82 Append to a slice 4 min read
- Part 83 Append and return a slice 4 min read
- Part 84 Concatenate slices uniquely 5 min read
- Part 85 Remove from a slice 3 min read
- Part 86 Delete elements from a slice 7 min read
- Part 87 Remove duplicates from a slice 5 min read
- Part 88 Search for an element in a slice 6 min read
- Part 89 Check if an array contains a value 5 min read
- Part 90 Merge slices 4 min read
- Part 91 Sort a slice 5 min read
- Part 92 How to sort in Go 10 min read
- Part 93 Sort an array of ints 4 min read
- Part 94 Sort ints in reverse 3 min read
- Part 95 Maps in Go 9 min read
- Part 96 Check if a key exists in a map 12 min read
- Part 97 Length of a map 2 min read
- Part 98 Delete from a map 3 min read
- Part 99 Copy a map 14 min read
- Part 100 Convert a slice into a map 6 min read
-
8 Structs and Interfaces 20 lessons
- Part 101 Structs in Go 7 min read
- Part 102 Anonymous structs 13 min read
- Part 103 Constants in structs 3 min read
- Part 104 Print a struct 4 min read
- Part 105 Copy a struct 5 min read
- Part 106 Check if a struct is empty 4 min read
- Part 107 Set default values in structs 3 min read
- Part 108 Remove fields from a struct 5 min read
- Part 109 Store values in a struct in a loop 3 min read
- Part 110 Methods on a type 5 min read
- Part 111 Constructor pattern 6 min read
- Part 112 Interfaces 8 min read
- Part 113 Convert interface to string 16 min read
- Part 114 Type assertion 5 min read
- Part 115 Struct embedding 7 min read
- Part 116 Generics (Go 1.18+) 7 min read
- Part 117 Enum pattern in Go 17 min read
- Part 118 Tuple-like patterns 4 min read
- Part 119 reflect package 7 min read
- Part 120 Print the type of a value 4 min read
-
9 Concurrency - Goroutines, Channels, Sync 14 lessons
- Part 121 Goroutines explained 10 min read
- Part 122 Return a value from a goroutine 4 min read
- Part 123 Goroutines vs OS threads 7 min read
- Part 124 Channels in Go 12 min read
- Part 125 Channel basics 13 min read
- Part 126 Buffered channels 9 min read
- Part 127 Channels with multiple receivers 6 min read
- Part 128 Check if a channel buffer is full 5 min read
- Part 129 Stop a goroutine cleanly 4 min read
- Part 130 Mutex 9 min read
- Part 131 WaitGroup 12 min read
- Part 132 Concurrency patterns overview 12 min read
- Part 133 Fan-out / fan-in pattern 7 min read
- Part 134 context package 9 min read
-
11 File I/O and OS 26 lessons
- Part 141 os package overview 6 min read
- Part 142 Read environment variables 10 min read
- Part 143 Set environment variables 5 min read
- Part 144 Read a file - all methods 7 min read
- Part 145 Read a file into a variable 7 min read
- Part 146 Append to a file 7 min read
- Part 147 Read and update the same file 5 min read
- Part 148 Seek in a file 4 min read
- Part 149 Read a file with a timeout 9 min read
- Part 150 Copy a file (preserve permissions) 5 min read
- Part 151 os.Stat() examples 3 min read
- Part 152 Create nested directories 5 min read
- Part 153 Get the current directory 4 min read
- Part 154 Watch a directory (fsnotify) 9 min read
- Part 155 Execute shell commands 8 min read
- Part 156 Read command-line arguments 3 min read
- Part 157 flag package examples 7 min read
- Part 158 Parse multiple inputs 5 min read
- Part 159 Hide password input 6 min read
- Part 160 Build a CLI prompt 5 min read
- Part 161 Interactive CLI with go-prompt 5 min read
- Part 162 Build CLIs with Cobra 8 min read
- Part 163 Configuration with Viper 15 min read
- Part 164 Kill a process 5 min read
- Part 165 Monitor a background process 5 min read
- Part 166 Capture Ctrl+C signals 4 min read
-
12 JSON, YAML and Time 17 lessons
- Part 167 Read JSON data 8 min read
- Part 168 Parse JSON 7 min read
- Part 169 json.Unmarshal() 5 min read
- Part 170 omitempty in JSON tags 9 min read
- Part 171 Convert a map to JSON 3 min read
- Part 172 Convert a map to a struct 4 min read
- Part 173 Parse a YAML file 9 min read
- Part 174 time package basics 13 min read
- Part 175 Format time 4 min read
- Part 176 Timing code 4 min read
- Part 177 Get current time in milliseconds 4 min read
- Part 178 Multiply a duration by an integer 3 min read
- Part 179 Subtract a duration from a time 4 min read
- Part 180 Zero value for time.Time 3 min read
- Part 181 time.Ticker 7 min read
- Part 182 Ticker loop pattern 3 min read
- Part 183 Run repetitive tasks at intervals 5 min read
-
13 Networking, HTTP and Web Frameworks 21 lessons
- Part 184 Build a Go web server 14 min read
- Part 185 net/http package 12 min read
- Part 186 HTTP client with timeout 5 min read
- Part 187 POST a JSON request 4 min read
- Part 188 Set HTTP cookies 3 min read
- Part 189 HTTPS request with a bad certificate 4 min read
- Part 190 Pass multiple strings into a URL 4 min read
- Part 191 Get the IP address 4 min read
- Part 192 TCP server and client 5 min read
- Part 193 UDP server and client 5 min read
- Part 194 WebSocket server 10 min read
- Part 195 Port ping utility 8 min read
- Part 196 Pick a Go web framework 8 min read
- Part 197 Build APIs with Gin 11 min read
- Part 198 Build APIs with Fiber 12 min read
- Part 199 Build APIs with Chi 17 min read
- Part 200 Build APIs with Gorilla Mux 13 min read
- Part 201 GraphQL in Go 7 min read
- Part 202 gRPC in Go 13 min read
- Part 203 JWT authentication 10 min read
- Part 204 JWT examples 14 min read
-
14 Databases and Storage 11 lessons
- Part 205 database/sql package 10 min read
- Part 206 SQLite3 in Go 9 min read
- Part 207 CRUD REST API with Postgres 10 min read
- Part 208 gRPC CRUD API with Postgres 15 min read
- Part 209 Get started with Redis in Go 9 min read
- Part 210 CRUD REST API with Redis 10 min read
- Part 211 MongoDB in Go 10 min read
- Part 212 In-memory DB with memdb 8 min read
- Part 213 FlashDB in Go 6 min read
- Part 214 AWS DynamoDB in Go 11 min read
- Part 215 Connection pool patterns 7 min read
-
15 Concurrency, Performance, Testing 7 lessons
-
18 Real-World Projects and Architecture 10 lessons
- Part 233 Hexagonal (ports & adapters) architecture in Go Coming soon
- Part 233 Build a Go microservice with Docker 12 min read
- Part 234 Docker multi-stage build for Go 9 min read
- Part 235 Deploy Go to AWS Lambda 11 min read
- Part 236 cgo tutorial 9 min read
- Part 237 Create a PAM module in Go 18 min read
- Part 238 GUI apps with Shiny 14 min read
- Part 239 FIFO queue implementation 7 min read
- Part 240 Queue implementation 4 min read
- Part 241 sed/awk equivalents in Go 4 min read
-
19 Math and Misc 10 lessons
- Part 242 math package overview 6 min read
- Part 243 math.Pow() 4 min read
- Part 244 regexp package 7 min read
- Part 245 io.Reader to string 4 min read
- Part 246 Convert []byte to io.Reader 3 min read
- Part 247 io.ReadCloser 4 min read
- Part 248 HTML body to string 4 min read
- Part 249 The Go gopher mascot story 14 min read
- Part 250 Go vs Rust 6 min read
- Part 251 Go interview questions 11 min read

