Go programming on a Raspberry Pi

Way to Go

© Lead Image © Nelli Valova, 123RF.com

© Lead Image © Nelli Valova, 123RF.com

Article from Issue 225/2019

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.

Figure 1: Rasp Pi LED setup.

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

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



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

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy Linux Magazine

Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

comments powered by Disqus