A hands-on introduction to Solod (So) — a subset of Go that translates to C.
This repo contains small examples that show individual language, concurrency, stdlib, and safety features, as well as sample apps and C libraries interop that demonstrate how everything fits together.
Hello world • Values • Variables • Constants • For • If/else • Switch • Arrays • Slices • Maps • Functions • Multiple returns • Variadic functions • For-range • Pointers • Strings and runes • Structs • Methods • Interfaces • Enums • Errors • Panic • Defer
Threads • Channels • Channel synchronization • Channel buffering • Channel timeout • Non-blocking channels • Closing channels • Worker pools • Worker pools w/channels • Mutexes • Atomic counters
Memory • C interop • Slices • Maps • Strings • Time • Unix time • Time format • Random numbers • Number parsing • Sorting • Custom sort • JSON • Reading files • Writing files • Scanning • File paths • Directories • Temp files • Testing • Benchmarking Command line • Env variables • Logging • TCP server • Exit
Dangling pointer • Divide-by-zero • Memory leak • Nil dereference • Panic mode
Coreutils: cat, cut, head, sort, uniq, wc
Count word frequencies by serge-hulne
DuckDB shell by Lorenzo Mangani
FreeSWITCH module by seven1240
IP address encryption and obfuscation by Frank Denis
Bouncing ball animation with Raylib.
Hashing with Sodium.
HTTP calls with curl.
Key-value store backed by SQLite.
TCP echo server using libuv.
Install the latest versions of the So compiler and standard library:
go install solod.dev/cmd/so@706286e46712
go get solod.dev@706286e46712
Run a specific example locally with the so run command:
so run lang/05-for
so run apps/head -n 4 data/jenny.txt
You'll need to have a C compiler installed and available as cc, or you can set a custom compiler by using the CC environment variable.
To see the generated C code, use the so translate command:
so translate -o lang/05-for/generated lang/05-for
Partially based on Go by Example by Mark McGranaghan, licensed under CC BY 3.0.