Hello dear community!
PdGo versions 0.9.0, 0.9.1, 0.10.0 are released!
Here is a quick changelog for each release.
Added the official Go language tutorial - A Tour of Go - adapted to run on Playdate with PdGo, out of the box, on both the Simulator and the device.
If you are coming from C or Lua gamedev and want to learn Go, this is the fastest way to try every language feature hands-on: packages, functions, control flow, pointers, structs, arrays, slices, maps, closures, methods, interfaces, type assertions, generics, errors, and io.Reader - all running directly on Playdate hardware.
All examples are located in the tour_of_go/ directory. Each example is a self-contained PdGo project with its own build.sh.
The examples cover Go fundamentals (01-26), pointers and structs (27-32), slices (33-41), maps (44-47), functions and closures (48-49), methods (50-57), interfaces (58-62), type assertions and switches (64-65), Stringer (66), errors (67), io.Reader (68), and generics (generics_type_parameters, generics_generic_types, generics_all).
All examples are device-tested and avoid known TinyGo ARM fmt issues.
add ARM unwind/libc stubs to pd_cgo.c - TinyGo links libgcc when ‘error’ interface is used as return type, which references OS symbols (__exidx_start/end, _exit, _kill, _getpid) that don’t exist on bare-metal Playdate.
Build System
- Split install.sh into two installation modes - curl (remote) and local - for more flexible setup.
- Extracted TinyGo patches to standalone source files (cmd/pdgoc/tinygo-patches/), replacing inline heredocs in install.sh
with files downloaded from GitHub during installation.
- Refactored build_script.go - now copies existing playdate.ld (linker script) from TinyGo installation directory and merges the existing playdate.json file with per-build-specific flags.
- Added dependency download step in install.sh before building pdgoc.
Branding
Other
- Fixed empty metadata (version, commit, date) for pdgoc build.
- Updated README with new installation modes info and GC-related text consistency fixes
API Bindings: