TLDR; Just Want A Go Release Tool?

Jump to Using gorelease below.

The Full Read

I’m neither a lover nor a hater when it comes to Go and its ecosystem. Generally things Go are a bit rudimentary but very open and accessible. You may have to do some work yourself, but you’ll be able to get results.

Releasing Software in General

There are simple best practices around versioning and releasing software in general, regardless of language or tool:

  • Use semantic version numbers to indicate versions.
  • Make sure the release version number is constantly branded on source and artifacts.

Do those two things and you’ve got an orderly, identifiable, reproducible product.

Releasing Software in Go

So what does Go…

Photo by Josh Redd on Unsplash

I wanted to really understand the flow of Go code to production at my work. I looked at all the IaC code they had in place and was overwhelmed — so many tools involved, so much configuration. So I did the code monkey thing, and went off to a dark corner and implemented the bare minimum myself to learn.

This is a long post, but stick with it, look in the associated repository, and you’ll be able to create a program and deploy it into a Kubernetes cluster all on your own machine — not too shabby.

The Plan

The overall lesson…

Photo by SpaceX on Unsplash

I grew up in the Space Shuttle era. With the exception of the Mars rovers, not much has caught my imagination in the space race since. Until SpaceX that is. SpaceX is impressive. Consistent innovation and driven by high aspirations. Their technology has made private commercial launches the driving force in the field. Watching their rockets land on barges at sea, and knowing they keep successfully reusing them is inspiring.

A Lot Has Changed in 60 Years: Vostok 1

Vostok 1 was launched on April 12th, 1961. It was basically a bunch of 1950s intercontinental ballistic missiles (ICBM), strapped together, with a tiny deep-sea submarine, ironically referred to as…

This note isn’t suggesting a pattern to follow, it’s a thought exercise. Let’s look at using a closure where we’d idiomatically use a struct.

A Fibonacci Number Sequence Generator

For this thought exercise, we will implement a Fibonacci Number sequence generator two ways, once with a struct and once with a closure. We’ll use the same approach in both to compare.

As a Structure

So here’s a simple and idiomatic implementation with a struct:

package mainimport "fmt"type Fibonacci struct {
x1, x2 int
func NewFibonacci() *Fibonacci {
return &Fibonacci{-1,1}
func (f *Fibonacci) Next() int { f.x1, f.x2 = f.x2, f.x1 + f.x2 return f.x2…

Photo by Markus Spiske on Unsplash

If you’re curious about our reality but not familiar with the Double-slit experiment, I think you should take the time to learn about it. It was a favorite of Richard Feynman, a personal hero of mine.

So what about this experiment made me think about the “Are we living in a simulation?” question that has been discussed by folks of late? It’s where it intersects with the Copenhagen Interpretation, which posits that it’s best to stick to the math and think in terms of probability waves rather than discrete measurables.

So you have this experiment that shows that an electron…

I’m no prude but I’m uncomfortable with Go’s naked returns. A naked return, as covered in A Tour of Go is:

func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x

The return is without its expected arguments, the arguments must be derived from the function signature and the assignments in the code. A Tour of Go notes “They can harm readability in longer functions.”

No, they just harm readability, and in several ways:

  • When you see the return you are forced to look at the function signature to…

Photo by Rick Mason on Unsplash


In cognitive science, you’ll come across discussions of the two modes of neural activity, focused and scattered. In focused you’re working with a relatively small set of related chunks of information, for example solving a problem. In scattered your brain is ping-ponging around seemingly unrelated pieces of information and making neural connections between them, dreaming would be one example of this.


In meditation, you’ll come across types of meditation that are geared towards focusing your mind, and those that specifically strive to unfocus your mind. This isn’t coincidental, the meditation is targeting one or the other cognitive state.

Coding From Home

Today I…

Go 1.16 added the embed package. Theoretically, it offered a better solution to how I’d previously implemented some things so I gave it a try.

The Situation

So, I had a large string template that I use to generate some output from. Previously I did the following:

const (
TemplateStr = `
blah blah blah some big string contents goes here ... Mauris mollis neque nisl, sit amet facilisis nulla finibus ut. Aliquam massa metus, imperdiet a finibus accumsan, interdum vitae felis. Ut et dapibus purus, sed mattis nunc. Mauris dui nunc, suscipit consectetur vulputate sit amet, luctus feugiat leo. Quisque fermentum…

Photo by SK Yeong on Unsplash

I believe in keeping software dependencies up to date in a timely fashion. I’ve never liked the if it ain't broke, don't update it approach. I’ve written about this before. With Go projects I periodically run:

$ go get -u the/module/name

To update the dependencies in a project using the/module/name of the current project. Usually, this just grinds against the go.mod file and does the right thing, updating all the modules and their dependencies to the latest and greatest. Sometimes, when you run this, if a dependency introduced a breaking change, your code won’t build, or your tests fail. …


Graybeard code monkey, started on an Apple IIe, got a CS degree in the 80’s, and coded my way through C, C++, Objective-C, Java, Kotlin — and now Go.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store