Skip to main content

Go development

Fast, simple, and easy-to-operate services in Go — from APIs and background jobs to low-level protocol libraries.

Hand-drawn illustration for Go

Tools and frameworks we use

  • Go
  • Fiber
  • GORM
  • PostgreSQL
  • Cron jobs
  • Docker Compose
  • Caddy
  • APDU and NFC
  • CBOR
  • secp256k1
  • lnd

Go development for simple, robust services

Go is designed for services that should be easy to read, quick to build, and simple to operate. A single binary, few dependencies, and good support for concurrency make the language well suited to APIs and background jobs that need to run reliably over time. We have built services in Go with Fiber, GORM, and PostgreSQL, and workers that fetch and aggregate market data on a schedule.

When we recommend Go — and when Rust or .NET is a better fit

Go is our first choice when a service should be small, start quickly, and be simple to operate: APIs of moderate complexity, workers that fetch data on a schedule, command-line tools, and network-level libraries. Compilation is fast, the binary is self-contained, and the code is easy for new developers to pick up.

There are still good reasons to choose something else:

  • Rust when correctness and control over memory matter most, or when the best libraries live there. Canary is written in Rust, where BDK and rust-bitcoin are well established.
  • .NET when the team already has a large C# codebase, shared libraries, and operations built around Azure. A single Go service in an all-.NET environment rarely gains enough to justify an extra language.
  • Rich domain models with a lot of business logic can become verbose in Go. There, languages with a more expressive type system are often the better tool.

Within Go we stay close to the standard library, and use Fiber and GORM where they genuinely save time.

Protocols, NFC, and Lightning in Go

Go also works well close to hardware and protocols. We wrote tapcards, an open-source Go library for the Coinkite Tap Cards protocol with a focus on Satscard. The library talks to the card over NFC using APDU commands, encodes messages in CBOR, and uses secp256k1 for cryptography. We have also contributed to the Lightning ecosystem, including wallet work based on lnd.

Typical engagements

APIs and backend services

We build APIs in Go with Fiber and PostgreSQL, with a clear structure and few dependencies that keep the service easy to operate.

Background jobs and data flows

We build workers and scheduled jobs that fetch, aggregate, and store data — for example market data from several sources.

Protocols and hardware

We implement low-level protocols in Go, such as communicating with NFC cards over APDU with CBOR encoding and cryptography.

Frequently asked questions

When do you recommend Go?

Go suits services that need to be fast, use few resources, and be easy to deploy as a single binary. It is a good choice for APIs, background jobs, and network-level tools.

How do you run Go services in production?

Often in Docker with Docker Compose behind Caddy, or on a cloud platform such as Azure or Fly.io. We choose the simplest setup that covers the need.

Do you have experience with Go in the Bitcoin and Lightning ecosystem?

Yes. We have written an open-source Go library for the Coinkite Satscard and contributed to wallet work based on lnd.

How quickly can you start?

Get in touch with a short description of what you need, and we will respond with an assessment of scope and when we can contribute.

Need help with Go?

Tell us briefly about the product, the team, or the system. We will respond with a practical suggestion for the next step — a complete delivery, senior capacity in your team, or technical advice.

Your email address and message are used only to respond to your enquiry.

Location
Oslo, Norway