This repo is a directory of tools, packages and tutorials to let you introduce Go in your hardware projects.
Go can target platforms and architectures that are primarily in the scope of non-real time embedded operating systems.
Out-of-the-box cross compilation story.
GOOS=linux GOARCH=arm go buildto build a binary for ARM/linux boards from a Mac or Windows machine. No other configuration is required.
Built-in concurrency primitives in Go is making it easier to write concurrent programs.
Go is garbage collected language but the garbage collector footprint has been improved significantly since Go 1.4. The pause times are being targetted to be 10ms or less even with large heaps and is not a significant disadvantage on non-real time operating systems -- the preemptive nature of the OS scheduler is more of a major problem than pause times.
Go's network stack is high quality and maintained well. Networking is a core component in IoT.
Go provides out-of-the-box HTTP, HTTPS and HTTP/2 client/server implementations.
Writing C bindings in Go is very trivial with cgo unlike other high level programming languages like Python and Java. It is so much easier to depend on an existing C/C++ library from the Go context.
C-like syntax enables the existing IoT/embedded programmers (mostly fluent in C) to read and write Go without much knowledge of the language.
Go programs compile to static binaries and doesn’t require a runtime on the host (e.g. a VM). Deployment is copy/pasting a binary.
Go had strong community figures who worked on the hardware aspects from the early days.
Go is efficient, fast and has low memory footprint.
Code reuse between server and client (connected device or mobile).
Contributions are welcome, please fork and open a PR if you see a missing package, tutorial, etc.