by jacobsa

jacobsa /go-serial

A Go library for dealing with serial ports.

444 Stars 84 Forks Last release: Not found Apache License 2.0 70 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


This is a package that allows you to read from and write to serial ports in Go.

OS support

Currently this package works only on OS X, Linux and Windows. It could probably be ported to other Unix-like platforms simply by updating a few constants; get in touch if you are interested in helping and have hardware to test with.


Simply use

go get
go get github.com/jacobsa/go-serial/serial

To update later:

go get -u github.com/jacobsa/go-serial/serial


Set up a

struct, then call
. For example:
    import "fmt"
    import "log"
    import "github.com/jacobsa/go-serial/serial"


// Set up options.
options := serial.OpenOptions{
  PortName: "/dev/tty.usbserial-A8008HlV",
  BaudRate: 19200,
  DataBits: 8,
  StopBits: 1,
  MinimumReadSize: 4,

// Open the port.
port, err := serial.Open(options)
if err != nil {
  log.Fatalf("serial.Open: %v", err)

// Make sure to close it later.
defer port.Close()

// Write 4 bytes to the port.
b := []byte{0x00, 0x01, 0x02, 0x03}
n, err := port.Write(b)
if err != nil {
  log.Fatalf("port.Write: %v", err)

fmt.Println("Wrote", n, "bytes.")

See the documentation for the

struct in
for more information on the supported options.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.