ardanlabs.com ardanlabs.com

Modules Part 06: Vendoring

Series IndexWhy and WhatProjects, Dependencies and GoplsMinimal Version SelectionMirrors, Checksums and AthensGopls ImprovementsVendoringIntroductionIt’s no secret that I am a fan of vendoring when it’s reasonable and practical to use it for your application projects. I believe vendoring gives your application projects the most durability since the project owns every line of source code it needs to build the applications. If you...

ardanlabs.com ardanlabs.com

Modules Part 05: Gopls Improvements

Series IndexWhy and WhatProjects, Dependencies and GoplsMinimal Version SelectionMirrors, Checksums and AthensGopls ImprovementsVendoringPreludeThis is a guest post written by Rohan Challa, a member of the Go team working on gopls.This document is a follow up to Bill Kennedy’s post on projects, dependencies and gopls. His post showed that gopls did not work well with modules, particularly when adding and removing dependencies from a...

ardanlabs.com ardanlabs.com

Docker Images : Part II - Details Specific To Different Languages

Series IndexReducing Image SizeDetails Specific To Different LanguagesIntroductionIn the first part, we introduced multi-stage builds, static and dynamic linking, and briefly mentioned Alpine. In this second part, we are going to dive into some details specific to Go. Then we will talk more about Alpine, because it’s worth it; and finally we will see how things play out with other languages like Java, Node, Python, Ruby, and...

ardanlabs.com ardanlabs.com

Docker Images : Part I - Reducing Image Size

Series IndexReducing Image SizeDetails Specific To Different LanguagesIntroductionWhen getting started with containers, it’s pretty easy to be shocked by the size of the images that we build. We’re going to review a number of techniques to reduce image size, without sacrificing developers’ and ops’ convenience. In this first part, we will talk about multi-stage builds, because that’s where anyone should...

ardanlabs.com ardanlabs.com

Integration Testing in Go: Part II - Set-up and Writing Tests

PreludeThis post is the 2nd installment of a 2 part series about integration testing. You can read the first installment, which is about executing tests in a restricted environment using Docker. The example repository that this post draws it examples from can be found here.Introduction”More than the act of testing, the act of designing tests is one of the best bug preventers known.” - Boris BeizerBefore an integration test can be...

ardanlabs.com ardanlabs.com

Caddy Partnership With Light Code Labs

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 Labs family of products and services. Caddy is a lightweight ingress service written in Go that provides automated security features and a plugin environment for extensibility. With the service being free open source (FOSS), small and large Go engineering teams finally...

ardanlabs.com ardanlabs.com

An Open Letter To The Go Team About Try

“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 language feels infinite, the costs of adding further features to it are no longer apparent”. - Mark MillerThe new try proposal is an addition to the language that introduces a second mechanic to handle errors. It is being introduced in response to data gathered...

ardanlabs.com ardanlabs.com

Concurrency Trap #2: Incomplete Work

IntroductionIn my first post on Goroutine Leaks, I mentioned that concurrency is a useful tool but it comes with certain traps that don’t exist in synchronous programs. To continue with this theme, I will introduce a new trap called incomplete work. Incomplete work occurs when a program terminates before outstanding Goroutines (non-main goroutines) complete. Depending on the nature of the Goroutine that is being terminated...