The Best Go Content on the Internet


Hooking libc using Go shared libraries

Contributed by

Alastair O’Neill gave a talk at the BSides Manchester security conference in August about userland rootkits that use the LD_PRELOAD mechanism. Most of these rootkits are written in C. I knew that as of version 1.5, Go supports a build mode for shared libraries and having seen the talk, I wondered if I could write something similar in Go and learn something about LD_PRELOAD, cgo and building Go shared libraries in the process.

Read more...

Go in a Monorepo

Contributed by

A “monorepo” is a monolithic code repository which contains many different projects and libraries. At DigitalOcean, we have created a monorepo called cthulhu to house all of our Go code. The purpose of cthulhu is to provide a one-stop shop for our internal Go libraries, services, tools, and third party dependencies. Bryan Liles previously wrote a blog post about cthulhu early in 2015. This post will cover many of the same topics, but will also detail some of the improvements we have made over the past year to make cthulhu even better.

Read more...

goa: Untangling Microservices

Contributed by

goa: Untangling microservices The Raise of Microservice Architectures and APIs After suffering through a monolithic Rails application for a number of years, we (the RightScale Engineering team) shifted our focus to microservice architectures. As many others, we have encountered some of their pitfalls as well. One of them is that building good APIs is difficult. Changing APIs is even more difficult. And any APIs that get exposed to customers are almost impossible to ever change, it seems.

Read more...

Smart Cryptography with Superdog and Vault

Contributed by

Superdog - the Crypto library for Vault from Hashicorp At XOR Data Exchange we deal with a lot of sensitive data for our customers. We needed to be able to support strong encryption with key rotation in a simple and practical way. So we wrote superdog to help with this task. Superdog is a library for managing strong cryptography in both development/test environments. Superdog provides an elegant wrapper to the Vault API that allows you to manage your cryptographic keys using any code that implements the KeyProvider interface.

Read more...

Go Fuzz

Contributed by

In April of this year, Dmitry Vyukov released the first version of go-fuzz, a coverage-guided fuzz testing tool based on ideas from afl. With very little fanfare, he unleashed it on the Go standard library and started filing huge numbers of crashers and other bugs found via automated, randomized testing. Fuzzing is testing code by feeding it random data. It dates back to to Professor Barton Miller’s work in late 1980s.

Read more...

afero: A Universal Filesystem Library

Contributed by

Anyone who spends a few minutes talking with me about development knows I love Go. My Github and Blog are practically a love letter to the language. Today I want to share with you something I’ve been working on for the past year, and I hope you will really get excited about it. Many applications require access to the file system to create, modify or delete files and folders. I’ve always felt a bit odd making calls directly to the os package.

Read more...

Debugging Go programs with Delve

Contributed by

Tracking down bugs in your code can be a very frustrating experience. This is even more true of highly parallel code. Having a good debugger at your disposal can make all the difference when it comes to tracking down a difficult, or hard to reproduce bug in your code. Throughout this post I will discuss Delve, which is a debugger specifically built for Go. Delve aims to solve the various issues felt by developers when debugging their Go code with traditional tools such as GDB.

Read more...

Working with Semantic Versions

Contributed by

Semantic Versioning (a.k.a SemVer) has become a popular way to handle versions. The structure not only allows for incremental releases but allows people and automation to deduce what those changes mean. This makes SemVer ideal for a wide range of uses even though they are most well known for package managers. Before we look at how we can work with them in Go let’s take a look at what a semantic version looks like.

Read more...

December Blog Series Introduction

Contributed by

It’s that time of year again… The time when young gophers dream of high-quality articles about Go programming. We’ve run our “Advent” series at GopherAcademy for two years now, and it has been by far the most successful content we’ve ever published. Each post receives thousands of page views from all across the globe. This year we’re changing things slightly: We’ve renamed it to the “December Blog Series” to recognize the multi-cultural and international readership that our blog has gained.

Read more...

GopherCon 2015 lightning talk results

Contributed by

Registrations for the GopherCon’s Hack Day talks closed on the 20th of July, here are the results. Forward After the popularity of the lightning talk sessions last year, and the huge interest the call for papers received, we expected very high demand for lightning talk slots this year. Surprisingly, that demand never materialised. However, this is good news, because it means that everyone who registered their interest will have the opportunity to present on stage.

Read more...