Golang-Examples

July 29, 2026 · View on GitHub

DOI Modern Go examples License: MIT

Small, focused programs for learning Go—from Hello, World! to concurrency, WebAssembly, runtime tracing, and modern language features. Most examples are standalone programs and can be run independently.

Use the online editor to edit and run examples in the browser, or play the WebAssembly-based Qix game.

Quick start

The module version in go.mod is the source of truth for the required Go toolchain.

git clone https://github.com/SimonWaldherr/golang-examples.git
cd golang-examples
go run ./beginner/HelloWorld.go
go run ./advanced/iterators
./scripts/check-modern.sh

Repository map

DirectoryWhat you will find
beginner/Syntax, types, control flow, files, and small algorithms
advanced/Generics, iterators, concurrency, encoding, tests, and benchmarks
expert/Servers, tracing, assembly, CGO, cryptography, and image generation
non-std-lib/Examples that depend on third-party packages or external services
tinygo/TinyGo and microcontroller examples

Modern Go highlights

These examples intentionally use recent stable Go features:

Go versionFeatureRun it
1.23Range-over-function iterators plus iter, maps, and slicesgo run ./advanced/iterators
1.24Generic type aliasesgo run ./advanced/generic-alias
1.24Benchmarks with testing.B.Loopgo test ./advanced/benchmark-loop -bench .
1.25sync.WaitGroup.Gogo run ./advanced/waitgroup-go
1.25Deterministic concurrent tests with testing/synctestgo test ./advanced/synctest
1.25Runtime trace flight recordergo run ./expert/flight-recorder
1.26Initialized pointers with new(expression)go run ./beginner/initialized-pointer
1.21Structured JSON logging with log/sloggo run ./advanced/structured-logging

The flight-recorder example writes flight.trace; inspect it with go tool trace flight.trace.

nanoGo is a minimalist interpreter for a supported subset of Go. It evaluates source code dynamically in a CLI, REPL, embedded host, or browser playground; when used in the browser, the interpreter itself is compiled to WebAssembly. That makes nanoGo a strong fit for interactive tutorials, editable documentation, controlled snippets, and browser-based Go experiments. Try the nanoGo playground or embed it in a web page.

nanoGo, TinyGo, and GopherJS solve different problems

nanoGoTinyGoGopherJS
Execution modelInterprets supported Go source at runtimeCompiles Go programs ahead of timeCompiles Go programs ahead of time to JavaScript
Browser artifactThe interpreter runs in WASM and evaluates guest source dynamicallyThe application itself can be compiled to WASMPure JavaScript generated from the application
Best suited toPlaygrounds, REPLs, live examples, controlled embedded scripting, and teachingMicrocontrollers, embedded applications, and deployable WASM programsBrowser front ends and JavaScript-based web integrations
Go compatibilityDeliberately supported language and library subsetA compiler with its own documented Go compatibility differencesBroad Go support with documented browser and JavaScript-runtime constraints
Host controlOptional capabilities and cooperative resource limits can restrict guest sourceThe compiled program runs for its selected target; TinyGo is not an interpreter sandboxThe generated program executes with normal browser JavaScript capabilities

nanoGo is therefore not a smaller replacement for TinyGo or GopherJS. Choose nanoGo when source must be edited or evaluated at runtime; choose TinyGo when you want to compile and deploy an application, for example to a Raspberry Pi Pico; choose GopherJS when compiled JavaScript is the right browser target.

The existing live editor uses GopherJS

The GitHub Pages editor uses its go2js integration, which is based on GopherJS. Pressing F5 formats the editor contents, compiles the Go program to JavaScript, and evaluates that JavaScript in the page. It is a compile-and-run workflow, not a nanoGo interpreter session.

The following curated list contains public, non-fork repositories from SimonWaldherr that complement this collection.

Go learning and reusable tools

Runtimes, data, and AI

  • nanoGo — a Go-subset interpreter for native hosts and WebAssembly, with a playground, REPL, CLI, and embeddable host API
  • tinySQL — an educational SQL engine written in pure Go
  • tinyRAG — a lightweight retrieval-augmented generation system
  • smallR — a small R-like environment written in Go
  • DataDock — a server-side database web interface

Graphics, games, and hardware

Other example collections

All are published as free and open-source software. Browse the complete Go repository search for more.

Install Go

  • macOS with Homebrew: brew install go
  • Debian/Ubuntu: sudo apt install golang-go
  • Other systems: follow the official Go installation guide

Example catalog

The examples are divided into beginner, advanced, expert, third-party, and TinyGo sections. Commands in the catalog below are shown relative to the corresponding directory unless they include a directory prefix.

Beginner

To execute a Golang program, write go run at the cli followed by the name of the file.
You also can convert the file to a binary executable program by the command go build.
If you know #!, also known as Shebang, there is an equivalent for go: //usr/bin/env go run \$0 $@ ; exit

Print Hello World with comments (Golang Playground)

go run HelloWorld.go

Print Hello World with comments (shebang version)

./HelloWorldShebang.go

Declare variables and print them (Golang Playground)

go run var.go

Various ways (and styles) to print variables (Golang Playground)

go run printf.go

If statement in Golang (Golang Playground)

go run if.go Hello

Declare array and print its items (Golang Playground)

go run array.go

Declare your own functions (Golang Playground)

go run function.go

Do something multiple times (Golang Playground)

go run for.go

Read via cli provided input data (Golang Playground)

go run args.go string string2

Read via cli provided input data (Golang Playground)

go run input.go

Or scan for it (Golang Playground)

go run scan.go

Read named argument input data (Golang Playground)

go run flag.go

Return the working directory (Golang Playground)

go run dir.go

Return the current time/date in various formats (Golang Playground)

go run time.go

Return pseudo random integer values (Golang Playground)

go run random.go

Concat strings in two different ways (Golang Playground)

go run cat.go

Modulo operation finds the remainder of division (Golang Playground)

go run modulo.go

Split a string by another string and make an array from the result (Golang Playground)

go run split.go

An example implementation of the Ackermann function (Golang Playground)

go run ackermann.go

An example implementation of the Euclidean algorithm (Golang Playground)

go run euklid.go

Submit a function as argument (Golang Playground)

go run functioncallback.go

A function returned by a function (Golang Playground)

go run functionclosure.go

A function with an unknown amount of inputs (variadic function) (Golang Playground)

go run functionvariadic.go

Empty interface as argument (You Don't Know Type) (Golang Playground)

go run interface.go

Execute Shell/Bash commands and print its output values (Golang Playground)

go run shell.go

Make structs (objects) which have functions (Golang Playground)

go run oop.go

Dependency injection for easier testing

cd beginner/di
go test

Hashing (md5, sha) in go (Golang Playground)

go run hashing.go

Error handling – creating, returning, wrapping and inspecting errors

go run error.go

Switch statement – expression switch, condition switch, type switch and fallthrough

go run switch.go

Type conversions – numeric casts, string/[]byte/[]rune and strconv helpers

go run typeconv.go

Advanced

Benchmarking example (using JSON marshal and unmarshal for the sample) (Golang Playground) From the root directory ($GOPATH/github.com/SimonWaldherr/golang-examples), run this command:

go test -bench=. -benchmem advanced/json_bench/main_test.go

Make pipe-able unix applications with os.Stdin (Golang Playground)

go run pipe.go

AES-GCM encryption example (Golang Playground)

go run aesgcm.go

Bcrypt hashing example (Golang Playground) Please install package golang.org/x/crypto/bcrypt before run this file by running go get golang.org/x/crypto/bcrypt

go run bcrypt.go

Search element is exist in arrays or not (Golang Playground)

go run in_array.go

Calculate triangles (Golang Playground)

go run pythagoras.go (float|?) (float|?) (float|?)

Read from stdin (but don't wait for the enter key)

go run getchar.go

Wait and sleep (Golang Playground)

go run wait.go

Last in - first out - example (Pop and push in Golang) (Golang Playground)

go run lifo.go

Split a string via regular expression and make an array from the result (Golang Playground)

go run regex.go

More advanced regex (with time and dates) (Golang Playground)

go run regex2.go

Use my golibs regex package and have fun (Golang Playground)

go run regex3.go

Calculate and print the fibonacci numbers (Golang Playground)

go run fibonacci.go

Calculate and print the requested (32th) prime number (Golang Playground)

go run prime.go 32

Do things with numbers, strings and switch-cases (Golang Playground)

go run numbers.go

Use a template to create and fill documents (this example uses LaTeX) (Golang Playground)

go run template.go
pdflatex -interaction=nonstopmode template_latex.tex

Start a ticker (do things periodically)

go run ticker.go

Do something in case of a timeout (Golang Playground)

go run timeout.go

Convert go object to json string (Golang Playground)

go run json.go

Run unix/shell commands in go apps

go run exec.go

Compress by pipe

go run compress.go

Compress by file

go run compress2.go

Parse CSV (Golang Playground)

go run csv.go

Convert CSV to a Markdown table (Golang Playground)

go run csv2md.go

Parse a XML string into a Struct with undefined Fields (Golang Playground)

go run xml.go

Run a self killing app

go run suicide.go

GoCV : hello video

go run hello_video.go

GoCV : face detection

go run face_detect.go 0 model/haarcascade_frontalface_default.xml

Run the example for generic (Golang Playground)

go run generic.go

Protect shared state with sync.Mutex and sync.RWMutex

go run mutex.go

Context cancellation, timeouts, deadlines, and value propagation

go run context.go

Worker pool – distribute jobs across a fixed number of goroutines

go run workerpool.go

Expert

Calculate π with go (leibniz, euler and prime are running until you stop it via CTRL+C)

go run pi2go.go leibniz
go run pi2go.go euler
go run pi2go.go prime

Calculate π with go - same as above - but with live output (based on gcurses)

go run pi2go-live.go leibniz
go run pi2go-live.go euler
go run pi2go-live.go prime

List files in working directory

go run explorer.go

run assembly code from golang

go run assembly.go

run C code from golang

go run cgo.go

generate Go code with golang templates

go run codegen.go

Convert from rgb to hsl (Golang Playground)

go run color.go

Telnet with Golang

go run telnet.go

The smallest Golang http server

go run httpd.go

Secure Golang http server

go run httpsd.go

The smallest Golang http proxy

go run proxy.go

Read and write cookies

go run cookies.go

Demonstrate the power of multithreading / parallel computing you have to set GOMAXPROCS to something greater than 1 to see any effect

export GOMAXPROCS=8
time go run parallel.go true
time go run parallel.go false

A dynamic amount of channels

time go run dynparallel.go 8

Run the compiler and comment each line which contains an error

go build gocomment.go
./gocomment go-app.go

Convert a image to a grayscale and to a color inverted image

go run image.go

Generate an image with three colored circles (with intersection)

go run image2.go

Generate an image representing the Mandelbrot fractal

go run image3.go

Sql (sqlite) Golang example
maybe you also wanna take a look at my sql-examples-project

go run sqlite.go insert test
go run sqlite.go select

Public-key/asymmetric cryptography signing and validating

go run ppk-crypto.go

Command Line Arguments Golang Example We can get argument values though command line by specifying the operator '-' with the name of the argument and the value to be set. E.g. -env=qa

go run command_line_arguments.go
go run command_line_arguments.go -env=qa -consumer=true

Cron Golang Example We can trigger a function at a particular time through cron

go run cron.go

Map Golang Example Hash Map standard functions in golang

go run map.go

Token-bucket rate limiter – throttle request throughput with burst support

go run ratelimiter.go

TinyGo

You can even use Go on microcontrollers, the keyword here is TinyGo, a go compiler specially developed for SBCs and MCUs.
This is distinct from nanoGo: TinyGo compiles programs for deployment, while nanoGo interprets a supported Go subset dynamically for interactive and embedded-host use cases. If you want to blink the LED of your Raspberry Pi Pico, try this:

tinygo build -o firmware.uf2 -target=pico ./tinygo/blink.go

and then upload it to the pico.

Compile

One great aspect of Golang is, that you can start go applications via go run name.go, but also compile it to an executable with go build name.go. After that you can start the compiled version which starts much faster. If you start fibonacci.go and the compiled version you will notice, that the last line which contains the execution time doesn't differ much, but if you start it with time ./fibonacci 32 and time go run ./fibonacci.go 32 you will see the difference.

License

Copyright © 2026 Simon Waldherr Dual-licensed. See the LICENSE file for details.