Go Icon

Go

Go is a programming language built to resemble a simplified version of the C programming language.
267 Stories
All Topics

Brad Fitzpatrick bradfitz.com

Brad Fitzpatrick is leaving Google

But why?

Little bored. Not learning as much as I used to. I’ve been doing the same thing too long and need a change. It’d be nice to primarily work in Go rather than work on Go.

When I first joined Google it was a chaotic first couple years while I learned Google’s internal codebase, build system, a bunch of new languages, Borg, Bigtable, etc. Then I joined Android it was fun/learning chaos again. Go was the same when I joined and it was a new, fast-moving experiment. Now Go is very popular, stable…

Go github.com

Simple web statistics. No tracking of personal data

GoatCounter is a web analytics platform, roughly similar to Google Analytics or Matomo. It aims to give meaningful privacy-friendly web analytics for business purposes, while still staying usable for non-technical users to use on personal websites. The choices that currently exist are between freely hosted but with problematic privacy (e.g. Google Analytics), hosting your own complex software or paying $19/month (e.g. Matomo), or extremely simplistic “vanity statistics”.

There’s a free hosted offering for non-commercial use. For those running businesses, self-host the thing. Live demo here.

Filippo Valsorda github.com

age is a simple, modern, and secure file encryption tool

It features small explicit keys, no config options, and UNIX-style composability.

$ age-keygen -o key.txt
Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
$ tar cvz ~/data | age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age
$ age -d -i key.txt data.tar.gz.age > data.tar.gz

If Rust is more your thing, check out the perfectly named port: rage.

Go blog.jse.li

Building a BitTorrent client from the ground up in Go

What is the complete path between visiting thepiratebay and sublimating an mp3 file from thin air? In this post, we’ll implement enough of the BitTorrent protocol to download Debian.

It isn’t a full-fledged client (no magnet links, no multi-file torrents, no seeding), but that makes it an excellent candidate for reading and learning. Here’s the resulting source code.

Kubernetes github.com

A chaos engineering platform for Kubernetes

Chaos Mesh is a cloud-native Chaos Engineering platform that orchestrates chaos on Kubernetes environments. At the current stage, it has the following components:

  • Chaos Operator: the core component for chaos orchestration. Fully open sourced.
  • Chaos Dashboard: a visualized panel that shows the impacts of chaos experiments on the online services of the system; under development; curently only supports chaos experiments on TiDB(https://github.com/pingcap/tidb).

For the uninitiated, chaos engineering is when you unleash havoc on your system to prove out its resiliency (or lack thereof).

A chaos engineering platform for Kubernetes

Go github.com

A better way to handle, trace, and log errors in Go

This package is intended to give you more control over error handling via error wrapping, stack tracing, and output formatting. Basic error wrapping was added in Go 1.13, but it omitted user-friendly Wrap methods and built-in stack tracing. Other error packages provide some of the features found in eris but without flexible control over error output formatting. This package provides default string and JSON formatters with options to control things like separators and stack trace output. However, it also provides an option to write custom formatters via eris.Unpack.

Go github.com

A static website "generator" that lets you use servers and frameworks you already know

The scare quotes around generator are there because Staticgen doesn’t actually generate a static site for you. Instead, it downloads your dynamic site and produces a static version of it. A slightly new twist on an old idea:

If you’re unfamiliar, you can actually use the decades-old wget command to output a static website from a dynamic one, this project is purpose-built for the same idea, letting your team to use whatever HTTP servers and frameworks you’re already familiar with, in any language.

It is not without its caveats (no JavaScript rendering is a big one), but this could be useful in many circumstances you may find yourself in.

Bill Kennedy ardanlabs.com

The why and what of Go modules

If you’re looking for a thorough primer of Go modules, Bill Kennedy has you covered:

In this post, I will focus on the transition from GOPATH to modules and the problems modules are solving. Along the way, I will provide just enough of the semantics so you can have a better understanding of how modules work at a high level. Maybe more importantly, why they work the way they do.

When you’re done with this, check out part 2 of the series about projects, dependencies, and gopls.

Jerod Santo changelog.com/posts

5 things Rob Pike attributes Go's success to

As the saying goes… history doesn’t repeat itself, but it often rhymes.

If you want to create a successful programming language (or at least understand how you might), it’s immensely valuable to learn from others who have done just that. on Go Time episode #100, two of Go’s creators (Rob Pike and Robert Griesemer) sat down to discuss the language’s success. Here’s 5 things they attribute to its success.

Go github.com

Use HTTP/2 Server Push to create fast and idiomatic client-driven REST APIs

Around the advent of GraphQL, I found myself asking its proponents if HTTP/2 solves any of the same performance problems. Most of the answers were along the lines of, “it might, but that hasn’t been realized yet.” Well, Vulcain is here to realize it.

Over the years, several formats have been created to fix performance bottlenecks impacting web APIs: over fetching, under fetching, the n+1 problem

Current solutions for these problems (GraphQL, JSON:API’s embedded resources and sparse fieldsets, …) are smart network hacks for HTTP/1. But these hacks come with (too) many drawbacks when it comes to HTTP cache, logs and even security.

Fortunately, thanks to the new features introduced in HTTP/2, it’s now possible to create true REST APIs fixing these problems with ease and class! Here comes Vulcain!

See also their comparison between Vulcain, GraphQL, and API formats.

Jon Calhoun calhoun.io

Why can't we settle on a single application structure in Go?

Go Time panelist Jon Calhoun ruminates on a conversation started on episode 94 of the show:

The goal of this article is it explore why exactly there isn’t a single app structure that is recommended to new Gophers, and the overall goal of this series is help newcomers to Go understand what choices are available to them so they can get started a little easier.

Go github.com

Muon – GPU based Electron on a diet

Muon is a lightweight alternative to Electron written in Golang in about ~300 LoC, using Ultralight instead of Chromium. Ultralight is a cross-platform WebKit rewrite using the GPU to target embeded desktop applications that resulted in a fast, lightweight, and low-memory HTML UI solution that blends the power of Chromium with the small footprint of Native UI.

Between this, NodeGui, and Catalina’s support for React Native, Electron is getting squeezed on all sides.

Go github.com

Rudder is an open source Segment alternative

I’ve been a big fan of Segment since way back before they became our sponsors. The adapter pattern for marketing/analytics tools is a great idea and they’ve executed on it very well. I’m also a big fan of open source alternatives to commercial products. 😀

If the “Why Rudder?” section of the README (privacy & security, processing flexibility, unlimited events) has you nodding in agreement, this is worth a deeper look.

Rudder is an open source Segment alternative

JSON github.com

JSONC is a superset of JSON which supports comments

JSON formatted files are readable to humans but the lack of comments decreases readability. With JSONC, you can use block (/* */) and single line (//) comments to describe the functionality. Microsoft VS Code also uses this format in their configuration files like settings.json, keybindings.json, launch.json, etc.

This is a Go-only implementation, but the concept is portable to any language (hint, hint).

JSONC is a superset of JSON which supports comments

Go blog.arduino.cc

TinyGo on Arduino

Arduino announced they now work with TinyGo. To celebrate, they did a Q&A with Ron Evans on the Arduino blog.

Why choose TinyGo over other languages? If software is eating the world, then Go is eating the world of software. The popularity of Go is still rapidly expanding, and TinyGo helps bring the new “enterprise standard” language down to the smallest of processors. Also as a compiled language, TinyGo can offer substantially better performance and size efficiency than that of interpreted languages like JavaScript and Python.

If you haven’t yet, listen to our recent conversation with Ron Evans at OSCON 2019 to hear more about how “Go is eating the world of software.”

0:00 / 0:00