Go programming on a Raspberry Pi
Way to Go
We show you how to create a Go web app that controls Raspberry Pi I/O.
Go, or GoLang [1], is used widely for web development. Created by Google in 2009, Go is one of the fastest growing programming languages. One of its advantages is speed: Go compiles directly to native executable files in Windows, macOS, iOS, and Linux operating systems. However, Go can also be run in interpreted mode, like Python, while debugging. In this article, I create a Go web app that talks to the Raspberry Pi hardware.
Getting Started
To install Go on a Rasp Pi, enter:
$ sudo apt-get install golang
To test the install, you can check the Go version number:
$ go version go version go1.7.4 linux/arm
A simple "Hello World" Go program named hello.go
,
package main func main() { println("Hello World"); }
can be run in interpreted mode with:
$ go run hello.go Hello World
Running in interpreted mode is handy when you are doing a lot of debugging, but the compiled Go program runs considerably faster. To compile and run the hello.go example, enter:
$ go build hello.go $ ./hello Hello World
Now that the Rasp Pi has Go installed and working, the next step is to set up the Rasp Pi hardware.
Raspberry Pi Setup
Raspberry Pi connects to sensors and hardware through the general purpose input/output (GPIO) pins. For my test setup, I connected an LED to physical pin 7 (Figure 1) and a 330-ohm resistor to prevent damage to my Rasp Pi.
By default, all the Rasp Pi GPIO pins are set as inputs, but you can configure the mode of pin 7 to output
then set the output (light the LED), and read back the pin status – all with the gpio
command-line utility:
$ gpio mode 7 output # set pin 7 as an output $ gpio write 7 1 # 1=set, 0=reset $ gpio read 7 1
The gpio write 7 1
and gpio write 7 0
commands let you test the circuit and toggle the LED on and off.
Go and GPIO
A number of Go libraries and options can read and write to GPIO pins. For this example, I shell out (i.e., spawn programs through an intermediate shell ) to the gpio
command-line utility. For prototyping, I like this approach because I can test and verify the GPIO commands manually before writing any code.
Listing 1, writepin7.go
, uses the os/exec library to create the shell command variable testCmd
(line 10) that defines the gpio
command and its parameters. The shell command is executed by testCmd.Output()
(line 11). The gpio write
command has no output, but the gpio read
(defined in line 18) returns the state of the GPIO pin (line 24).
Listing 1
writepin7.go
To run the code in interpreted mode, enter:
$ go run writepin7.go GPIO Pin 7 value : 1
If the circuit is wired correctly, the light should be on.
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Support Our Work
Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.
News
-
Wine 10 Includes Plenty to Excite Users
With its latest release, Wine has the usual crop of bug fixes and improvements, along with some exciting new features.
-
Linux Kernel 6.13 Offers Improvements for AMD/Apple Users
The latest Linux kernel is now available, and it includes plenty of improvements, especially for those who use AMD or Apple-based systems.
-
Gnome 48 Debuts New Audio Player
To date, the audio player found within the Gnome desktop has been meh at best, but with the upcoming release that all changes.
-
Plasma 6.3 Ready for Public Beta Testing
Plasma 6.3 will ship with KDE Gear 24.12.1 and KDE Frameworks 6.10, along with some new and exciting features.
-
Budgie 10.10 Scheduled for Q1 2025 with a Surprising Desktop Update
If Budgie is your desktop environment of choice, 2025 is going to be a great year for you.
-
Firefox 134 Offers Improvements for Linux Version
Fans of Linux and Firefox rejoice, as there's a new version available that includes some handy updates.
-
Serpent OS Arrives with a New Alpha Release
After months of silence, Ikey Doherty has released a new alpha for his Serpent OS.
-
HashiCorp Cofounder Unveils Ghostty, a Linux Terminal App
Ghostty is a new Linux terminal app that's fast, feature-rich, and offers a platform-native GUI while remaining cross-platform.
-
Fedora Asahi Remix 41 Available for Apple Silicon
If you have an Apple Silicon Mac and you're hoping to install Fedora, you're in luck because the latest release supports the M1 and M2 chips.
-
Systemd Fixes Bug While Facing New Challenger in GNU Shepherd
The systemd developers have fixed a really nasty bug amid the release of the new GNU Shepherd init system.