Ardan Labs

Blog Posts by William Kennedy

Subscribe to our Newsletter

By signing up you get access to our FREE Training Bundle, Technical Tuesday releases, Special Offers, & Notifications on our latest content.

Oct 21, 2025

go training golang

Understanding how your data structures interact with hardware is one of the most powerful ways to improve application performance. This blogpost explores how CPU caches …

Sep 22, 2025

go training golang

Kubernetes CPU limits can look straightforward on the surface, but their impact on application performance is anything but simple. This article unpacks how Go services …

Aug 26, 2025

go Training golang

Go’s garbage collector is designed not only to manage memory safely but also to pace itself intelligently, striking a balance between low latency and high throughput. …

Jul 14, 2025

go Training golang

Originally published in 2019, this article is part two of a three-part series exploring Go’s garbage collector. Though the Go runtime has continued to evolve, the …

Jun 10, 2025

go Training golang

This article was originally published in 2018, yet its core insights into Go’s garbage collection model remain highly relevant for developers today. While some …

May 12, 2025

go Training golang

Although originally written in 2018, the following concepts remain essential for developers working with concurrency. This blogpost focuses on concurrency, …

Apr 14, 2025

go Training golang

This blogpost is the second installment in a three-part series exploring the mechanics and semantics of the Go scheduler. Despite being published in 2018, the content …

Mar 4, 2025

go Training golang

Although this blogpost was originally published in 2018, the concepts and principles discussed remain crucial for building efficient and performant multithreaded …

Feb 10, 2025

go Training golang

Although first introduced in 2014, the Context package remains a crucial component of Go programming, enabling efficient management of request-scoped data, deadlines, …

Feb 27, 2024

go training golang

Introduction After writing the Kubernetes (K8s) CPU Limits post, I was wondering what happens when a K8s memory limit is set for the same service. I’ve been hearing at …

Jan 15, 2024

go training golang

I have always appreciated the Go Team investing time on providing the community with the Go Tour. This website is designed to help developers get started in learning the …

Sep 21, 2023

go training golang

Introduction Prior to coding in Go, I was writing software in C#. In C# enumerations can be declared and the associated type can be used in functions and as fields in a …

Sep 8, 2023

go training golang

Series Here are all the posts in this series about the slices package. Binary Search Clip, Clone, and Compact Compare Contains, Delete, and Equal Introduction In the last …

Aug 25, 2023

go training golang

Series Here are all the posts in this series about the slices package. Binary Search Clip, Clone, and Compact Compare Contains, Delete, and Equal Introduction In the last …

Aug 18, 2023

go training golang

Series Here are all the posts in this series about the slices package. Binary Search Clip, Clone, and Compact Compare Contains, Delete, and Equal Introduction In the …

Aug 2, 2023

go training golang

Series Here are all the posts in this series about the slices package. Binary Search Clip, Clone, and Compact Compare Contains, Delete, and Equal Introduction Go’s most …

Mar 8, 2023

rust training

with Cheikh Seck Introduction This is the first in a series of posts that will explore the Rust programming language. I am going to take the same approach I did with Go …
Introduction I made it my mission in 2022 to learn everything I could about blockchain and as the year ends, I feel like I accomplished my goal. Love it, hate it, or …
Introduction A blockchain is an integrated solution of different computer science problems in the form of a single, append-only, publicly available, transparent, and …
Introduction In the first three posts, I explained there were four aspects of a blockchain that this series would explore with a backing implementation provided by the …
Introduction In the first two posts, I explained there were four aspects of a blockchain that this series would explore with a backing implementation provided by the …
Introduction In the first post, I explained there were four aspects of a blockchain that this series would explore with a backing implementation provided by the Ardan …
Introduction This is the first post in a series that will explore the semantics and implementation details of the Ardan blockchain project. The code is a reference …

Sep 29, 2020

go Training golang

Series Index Generics Part 01: Basic Syntax Generics Part 02: Underlying Types Generics Part 03: Struct Types and Data Semantics Introduction In the previous post, I …

Aug 18, 2020

go Training golang

Changes The draft is a living document which means these posts will need to change over time. This section documents when changes have taken place to this post. 21/08/20 …

Jul 23, 2020

go Training golang

Changes The draft is a living document which means these posts will need to change over time. This section documents when changes have taken place to this post. 21/08/20 …
Introduction In this paper written by Manish Jain (the founder of Dgraph) he describes Dgraph as: a distributed graph database which provides horizontal scalability, …
Introduction In most of the reviews for this post, I was asked why choose a graph database over something else? This is a hard question to answer since my experience …
Introduction I have spent a career building business applications that work with databases, starting with SQL and then moving to No-SQL. I’ve been curious how Graph …

Apr 13, 2020

go Training golang

Series Index Why and What Projects, Dependencies and Gopls Minimal Version Selection Mirrors, Checksums and Athens Gopls Improvements Vendoring Introduction It’s no …

Feb 10, 2020

go Training golang

Series Index Why and What Projects, Dependencies and Gopls Minimal Version Selection Mirrors, Checksums and Athens Gopls Improvements Vendoring Introduction One of the …

Dec 18, 2019

go Training golang

Series Index Why and What Projects, Dependencies and Gopls Minimal Version Selection Mirrors, Checksums and Athens Gopls Improvements Vendoring Introduction Every …

Dec 2, 2019

go Training golang

Series Index Why and What Projects, Dependencies and Gopls Minimal Version Selection Mirrors, Checksums and Athens Gopls Improvements Vendoring Introduction Modules is …

Oct 10, 2019

go Training golang

Series Index Why and What Projects, Dependencies and Gopls Minimal Version Selection Mirrors, Checksums and Athens Gopls Improvements Vendoring Introduction Modules …

Jul 22, 2019

go Training golang

Ardan Labs (a leader in building Go enterprise software) is excited to announce that we have partnered with Light Code Labs and Matt Holt to bring Caddy into the Ardan …

Jul 1, 2019

go Training golang

“Once a language gets complex enough, programming in it is more like carving out a subset from an infinite sea of features, most of which we’ll never learn. Once a …

Jun 27, 2018

go Training golang

Introduction I teach a class called Ultimate Go. The class is three days long and teaches you the history, mechanics and semantics of the Go programming language. The …

Apr 28, 2018

go Training golang

Introduction One day I was talking to Damian Gryski in Slack about some performance improvements he made to his go-metro package. When I first looked at the changes I was …

Mar 23, 2018

go Training golang

Introduction I’ve been seeing a lot of question about interfaces lately on Slack. Most of the time the answers are technical and focus on implementation details. …

Feb 20, 2018

go Training golang

Introduction I was guided for many years to write functions that are generalized and to create layers upon layers of abstraction so things don’t break as business …

Jan 22, 2018

go Training golang

Prelude It will be helpful to read this four-part series first on escape analysis and data semantics. Details on how to read an escape analysis report and pprof output …

Oct 24, 2017

go Training golang

Introduction When I started to work with Go’s channels for the first time, I made the mistake of thinking about channels as a data structure. I saw channels as a queue …

Jul 15, 2017

go Training golang

Prelude If you want to put this post in some better context, I suggest reading the following series of posts, which lay out some other fundamental and relevant design …

Jun 27, 2017

go Training golang

Prelude These are good posts to read first to better understand the material presented in this post: Index of the four part series: Language Mechanics On Stacks And …

Jun 8, 2017

go Training golang

Prelude This is the final post in a four part series discussing the mechanics and design behind pointers, stacks, heaps, escape analysis and value/pointer semantics in …

Jun 1, 2017

go Training golang

Prelude This is the third post in a four part series that will provide an understanding of the mechanics and design behind pointers, stacks, heaps, escape analysis and …

May 26, 2017

go Training golang

Prelude This is the second post in a four part series that will provide an understanding of the mechanics and design behind pointers, stacks, heaps, escape analysis and …

May 18, 2017

go Training golang

Prelude This is the first post in a four part series that will provide an understanding of the mechanics and design behind pointers, stacks, heaps, escape analysis and …

May 10, 2017

go Training golang

Prelude This post is part of a series designed to make you think about your own design philosophy on different topics. If you haven’t read the following post yet, please …

Feb 24, 2017

go Training golang

Updated on February 28th, 2017 Prelude This post is part of a series of posts designed to make you think about your own design philosophy on different topics. If you …

Feb 20, 2017

go Training golang

Prelude This post is part of a series of posts designed to make you think about your own design philosophy on different topics. If you haven’t read this post yet, please …

Feb 7, 2017

go Training golang

Updated on February 10th, 2017 Prelude This post is part of a series of posts designed to make you think about your own design philosophy on different topics. If you …

Jan 31, 2017

go Training golang

Prelude This post is part of a series of posts designed to make you think about your own design philosophy on different topics. I will not be laying out direct examples …

Dec 5, 2016

go Training golang

This is a talk that I gave at the Vancouver Meetup on November 29th, 2016. The talk covers topics around developing your own design philosophy with a focus on decoupling …

Nov 3, 2016

go Training golang

“I think it’s ok to do heinous stuff to test an API if it makes it more usable by others.” - Nate Finch Prelude If you are new to Go, it might help to read these …

Oct 21, 2016

go Training golang

Introduction Interfaces should only be used when their added value is clear. I see too many packages that declare interfaces unnecessarily, sometimes just for the sake of …

Oct 9, 2016

go Training golang

Introduction I see a lot of developers coming to Go from object oriented programming languages such as C# and Java. Because these developers have been trained to use type …

May 12, 2016

go Training golang

Introduction If you are new to Linux or the Mac you might find installing Go to be a bit confusing. It was for me when I started learning Go. Go was the reason I stopped …

May 5, 2016

go Training golang

I am constantly thinking about the Go language and how things work. Lately I have been thinking how everything in Go is by value. We see this when we pass values to …

Sep 13, 2015

go Training golang

Composition goes beyond the mechanics of type embedding. It’s a paradigm we can leverage to design better APIs and to build larger programs from smaller parts. It …

Mar 15, 2015

go Training golang

Go is an object oriented programming language. It may not have inheritance, but in this 20 minute video from the Bangalore meetup, I will show you how object oriented …

Feb 23, 2015

go Training golang

Introduction One of the things I love about Go is the profiling and debug information you can generate. There is a special environmental variable named GODEBUG that will …

Jan 11, 2015

go Training golang

Introduction Having some basic skills in debugging Go programs can save any programmer a good amount of time trying to identify problems. I believe in logging as much …

Dec 16, 2014

go Training golang

Introduction I am asked quite a bit about when and when not to use pointers in Go. The problem most people have, is that they try to make this decision based on what they …

Nov 10, 2014

go Training golang

Introduction In part I of this post, we learned about the error interface and how the standard library provides support for creating error interface values via the errors …

Oct 13, 2014

go Training golang

Introduction It is idiomatic in Go to use the error interface type as the return type for any error that is going to be returned from a function or method. This interface …

Sep 1, 2014

go Training golang

Introduction I was thinking about how the compiler looks to protect the code we write when it can. Invalid memory access checks are one type of safety check the compiler …

Aug 30, 2014

go Training golang

If you have not heard about the ALS Ice Bucket Challenge I would be surprised. It’s everywhere nowadays, being done by celebrities alike. After being challenged by …

Jun 27, 2014

go Training golang

Introduction Dave Cheney published a post called Ice Cream Makers and Data Races. The post showed an example of an interesting data race that can occur when using an …

Jun 25, 2014

go Training golang

Introduction If you are building any kind of application for a consumer based product, it is common to have large amounts of application data being generated about your …

Jun 20, 2014

go Training golang

Introduction Closures in Go are a very powerful construct but they can also be the cause of bugs if you don’t understand how they work. In this post I am going to pull a …

May 3, 2014

go Training golang

Introduction My business partner Ed asked me what would happen if a struct and an embedded field both implemented the same interface. We asked ourselves two questions: …

Apr 6, 2014

go Training golang

Introduction One of the more unique features of Go is how the language implements constants. The rules for constants in the language specification are unique to Go. They …

Mar 15, 2014

go Training golang

Introduction One of the first things I learned about in Go was using an uppercase or lowercase letter as the first letter when naming a type, variable or function. It was …

Mar 7, 2014

go Training golang

Introduction As I improve my knowledge and framework for a Go based web service I am building, I continue to go back and enhance my Beego Sample App. Something I just …

Feb 25, 2014

go Training golang

If you are attending GopherCon 2014 or plan to watch the videos once they are released, this article will prepare you for the talk by Gustavo Niemeyer and Steve Francia. …

Feb 17, 2014

go Training golang

Introduction In my last post called Concurrency, Goroutines and GOMAXPROCS, I set the stage for talking about channels. We discussed what concurrency was and how …

Jan 29, 2014

go Training golang

Introduction When new people join the Go-Miami group they always write that they want to learn more about Go’s concurrency model. Concurrency seems to be the big …

Jan 21, 2014

go Training golang

Introduction We are working on a project where we have to make calls into a web service. Many of the web calls return very large documents that contain many …

Jan 16, 2014

go Training golang

Gopher Academy announced a great program today. Today I’d like to announce the GopherCon Scholarship Program. It’s goal is to increase the visibility of women …

Jan 16, 2014

go Training golang

Introduction In October 2013 I sent out a call to action to the Go community. I wanted to form a group of Gophers that would come together and help write a specification …

Dec 31, 2013

go Training golang

Introduction There are lots of posts that talk about the internals of slices, but when it comes to maps, we are left in the dark. I was wondering why and then I found the …

Dec 20, 2013

go Training golang

Introduction The first thing I did when I started programming in Go was begin porting my Windows utilities classes and service frameworks over to Linux. This is what I …

Dec 17, 2013

go Training golang

With the release of Go 1.2, slices gained the ability to specify the capacity when performing a slicing operation. This doesn’t mean we can use this index to extend …

Dec 11, 2013

go Training golang

Introduction I am very excited about the Beego web framework. I wanted to share with you how I use the framework to build real world web sites and web services. Here is a …

Dec 10, 2013

go Training golang

At Ardan Studios we have spent the last 6 months, in our spare time and on weekends, building a consumer based mobile application called OutCast. The mobile application …

Nov 23, 2013

go Training golang

This is a guest post from Tad Vizbaras from Etasoft in South Florida. There are a number of editors and IDEs for Go development. LiteIde, Vim, Emacs and GEdit just to …

Nov 21, 2013

go Training golang

Have you ever found yourself in this situation. You have a case statement inside of a for loop and you would like to break from both the case and for statements in a …

Nov 5, 2013

go Training golang

Linux is unique to Windows in many ways, and writing programs in Linux is no exception. The use of standard out, standard err and null devices is not only a good idea but …

Nov 3, 2013

go Training golang

I am working on a project that requires pulling and processing different XML feeds from the web and storing the data into MongoDB as JSON. Since new feeds come up …

Oct 26, 2013

go Training golang

Introduction If you are using 3rd party packages, (packages that you don't own or control), you will want a way to create a reproducible build every time you build your …

Oct 17, 2013

go Training golang

I was testing new functionality on a program that is already running in production when suddenly the code behaved very badly. What I saw shocked me and then it became …

Oct 10, 2013

go Training golang

In Go values that are returned from functions are passed by value. Go gives you some nice flexibility when it comes to returning values from a function. Here is a simple …

Oct 2, 2013

go Training golang

Introduction In my post about building and running programs in Iron.Io, I needed to switched over to my Ubuntu VM to build linux versions of my test programs locally. I …

Oct 1, 2013

go Training golang

Nathan Youngman, with the help of others, has produced this document outlining months of research and discovery. I would appreciate everyone to honestly read it before …

Sep 26, 2013

go Training golang

I always find it interesting when I realize that something I have been practicing or dealing with for a long time has a name. This time it happens to be race conditions. …

Sep 26, 2013

go Training golang

This article was written for and published by Gopher Academy I was looking at a code sample that showed a recursive function in Go and the writer was very quick to state …

Sep 23, 2013

go Training golang

Slices are used everywhere in my code. If I am working with data from MongoDB, it is stored in a slice. If I need to keep track of a collection of problems after running …

Sep 14, 2013

go Training golang

After working in Go for some time now, I learned how to use an unbuffered channel to build a pool of goroutines. I like this implementation better than what is …

Sep 10, 2013

go Training golang

I am working on building code to load polygons for the different Marine Forecast areas in the United States. These polygons need to be stored in MongoDB and there is a …

Sep 7, 2013

go Training golang

Introduction Iron.io has a product called IronWorker which provides a task oriented Linux container that you can run your programs inside. If you are not sure what I …

Sep 4, 2013

go Training golang

In my Outcast data server I have several data retrieval jobs that run using different go routines. Each routine wakes up on a set interval. The most complex job is the …

Aug 31, 2013

go Training golang

Earlier in the month I wrote a post about using C Dynamic Libraries in Go Programs. The article built a dynamic library in C and created a Go program that used it. The …

Aug 28, 2013

go Training golang

For those of you who are like me, trying to learn the Mac and Linux operating systems, Golang programming and deployment constructs all at the same time, I feel your …

Aug 26, 2013

go Training golang

If you are coming to Go after using a programming language like C# or Java, the first thing you will discover is that there are no traditional collection types like List …

Aug 20, 2013

go Training golang

My son and I were having fun last weekend building a console based game in Go. I was recreating a game from my youth, back when I was programming on a Kaypro II. I loved …

Aug 15, 2013

go Training golang

Since I started programming in Go the concept and use of slices has been confusing. This is something completely new to me. They look like an array, and feel like an …

Aug 8, 2013

go Training golang

I ran into a problem today. I was building code to consume NOAA’s tide station XML document and quickly realized I was in trouble. Here is a small piece of that XML …

Aug 5, 2013

go Training golang

Back in June, Gustavo Niemeyer posted the following question on his Labix.org blog: Assume uf is an unsigned integer with 64 bits that holds the IEEE-754 representation …

Jul 29, 2013

go Training golang

This article was written for and published by Safari Books Online Back in May, I finally decided that it was time to move away from the Microsoft stack to Linux. The cost …

Jul 27, 2013

go Training golang

This article was written for and published by Safari Books Online If you read my article titled Analyze Data With MongoDB and Go, then you will understand the context of …

Jul 27, 2013

go Training golang

In the documentation provided by the Go language team you will find great information on pointers and memory allocation. Here is a link to that documentation: …

Jul 24, 2013

go Training golang

This article was written for and published by Safari Books Online My company is building a mobile application called Outcast. The idea behind Outcast is to give people …

Jul 20, 2013

go Training golang

On June 22nd through the 26th, Portland Oregon is hosting OSCON (Open Source Convention). The event is run by O’Reilly. After looking at the speakers list it …

Jul 12, 2013

go Training golang

When I was coding in C/C++ it was imperative to understand type. If you didn’t, you would get into a lot of trouble with both the compiler and running your code. …

Jul 10, 2013

go Training golang

Someone asked a question on the forum today on how to gain the benefits of inheritance without embedding. It is really important for everyone to think in terms of Go and …

Jul 6, 2013

go Training golang

Multi-threaded applications are very complicated, especially when your code is not organized and consistent with how resources are accessed, managed and maintained. If …

Jul 5, 2013

go Training golang

Since I started writing code in Go it has been a mystery to me how best to organize my code and use the package keyword. The package keyword is similar to using a …

Jun 24, 2013

go Training golang

I have been writing Windows services in C/C++ and then in C# since 1999. Now that I am writing server based software in Go for the Linux OS I am completely lost. What is …

Jun 17, 2013

go Training golang

I was really surprised how easy it was to read an XML document using the encoding/xml package that comes with the standard library. The package works by defining structs …

Jun 13, 2013

go Training golang

I wanted to send an email from my TraceLog package when a critical exception occurred. Fortunately Go’s standard library has a package called smpt which can be …

Jun 11, 2013

go Training golang

I have been struggling with using the Time package that comes in the Go standard library. My struggles have come from two pieces of functionality. First, trying to …

Jun 8, 2013

go Training golang

I am building my TraceLog package and it is really important that the package logs any internal exceptions and prevents panics from shutting down the application. The …

Jun 5, 2013

go Training golang

As you know if you read my blog, I have been building a set of new utility packages so I can start developing an application server I need for a new project. I am brand …

Jun 2, 2013

go Training golang

Check out my new installtion document: https://www.ardanlabs.com/blog/2016/05/installing-go-and-your-workspace.html I removed the sections about gocode and GDB. These are …

May 31, 2013

go Training golang

After working in Go for some time now, I learned how to use an unbuffered channel to build a pool of goroutines. I like this implementation better than what is …

May 31, 2013

go Training golang

For the past 20 years I have been writing server based and application software on the Microsoft stack. First in C/C++ leveraging the Win32 API and then in C# when .Net …