Thread-Safety in Go – an Overlooked Concern

Thread-Safety in Go - An overlooked concern
Gopher on image was designed by Renee French. (http://reneefrench.blogspot.com/)

When you first start tinkering with concurrency in any language, what's the most sought after goal is extracting the maximum output from the hardware you have available.

That's why we use it and study it in the first place - to achieve optimal parallelism & get some significant speed-up for our apps out of the box.

However, a not so glamorous part of studying the subject is understanding how to write thread-safe code. The techniques and principles which will enable you to keep your application well-behaved, even after scaling it to dozens of threads.

Even though this is an important thing to consider while writing concurrent code, it is often overlooked in most learning resources about concurrency. This problem is even more relevant in the Go community due to two common misunderstandings I will cover in the article.

Continue Reading

Speaking at Golab Conf this year!

This year, I'm going to be presenting at Golab Conf about Advanced Dependency Management in Go using Fx. I'm also hosting a workshop on integrating your Go service \w the ELK stack.

In the talk, we'll cover what the Fx framework is and how it can help you reduce some of the component wiring boilerplate as well as help you structure your applications into reusable modules, which is especially great in a microservice environment!

As for the workshop, it's a VERY hands-on 3-hour workshop in which you'll learn how to use the Elastic stack to greatly enhance your services' observability. If you have no idea what all that means, then this workshop is definitely for you. It will give you the knowledge to evaluate if these tools are right for you and the skills to fully integrate this into your systems & start using it right away.

If any of that sounds interesting to you, then book your seat!

Otherwise, check out the full agenda here as there are also other pretty cool talks & some quite interesting workshops!

The conference is hosted online throughout 19th October to 25th October from the comfort of your own seat at home.

The "Advanced Dependency Management in Go using Fx" talk is held on 16th October, 17:30 PM GMT +2.

The "Integrating your Go service with the ELK stack" workshop is held on 21st October, 12:30 PM GMT+2.

I'll see you there!

UPDATE:

The videos from the talk + workshop are out. Check them out:

Advanced Dependency Management in Go using Fx

Workshop - Integrating your Go service with the ELK stack

How to create a Logging Dashboard with Kibana

Kibana Dashboard


This article is part of the series Integrating your Go service with ELK

In this tutorial, I'll show you how to create a dashboard for your application's structured logs in Kibana.

This is a follow-up to this article, which covers how to instrument your Go application \w structured logging for use by Kibana (in this tutorial).

We'll use Kibana v7.6 but any version you're using should work. It's just that your UI might look a bit different & you'll have to adjust.

Let's jump straight in! We'll stick to simple panels, which suite most of the use-cases you'd need.

Continue Reading

A Concise Guide to the Latest Go Generics Draft Design

Generics in Go

Recently, the Go team announced an updated draft design for their Generics in Go proposal. It goes into a lot of details about why certain decisions were made, implementation details, etc.

In this article, my goal is to summarise the major upcoming changes, as the whole draft design can be a mouthful for many.

I will provide some code snippets to demonstrate the major features as well as give you the chance to experiment yourself with them, thanks to the new Go playground with support for generics.

Continue Reading

How to Use Structured Logs in your Go Application

structured logs in Kibana


This article is part of the series Integrating your Go service with ELK

The Elastic stack (also referred to as ELK) can bring a lot of value to your production services. But it is not that much of value if you don't use structured logs in your services.

In one of my latest posts, I wrote about what ELK is and why you should care. I also wrote a tutorial about how to integrate ELK with your Go app.

In this article, I will walk you through how to integrate structured logging in your Go services. We will use a sample HTTP service with a few basic endpoints and we'll use the zap library to emit logs on error/success, which would also include some domain-specific info.

Continue Reading

How to integrate your Go Service with ELK

Go loves ELK


This article is part of the series Integrating your Go service with ELK

In my last post, I shared how much value the ELK stack could bring for your application in terms of the monitoring capabilities it gives you.

In this post, I will walk you through how to integrate your Go application with ELK, what are the different parts of ELK, how they work and how to create a basic configuration for them.

Let's jump straight in, shall we?

Continue Reading

Managing Shared Components in Go Microservices with Fx

Managing Shared Components in Go Microservices


This article is part of the series Dependency Injection in Go using Fx

In many companies nowadays, microservices is the de facto way of handling service architecture. Some do it out of necessity as their application has reached a scale where the monolith is a bottleneck. Others, simply like being onboard the hype train. Whatever the scenario, the decision is often backed by the classical case for adopting microservices, which every junior dev studies extensively before their system design interview. What gets often neglected, however, is the problems which come with such an approach. Each of these problems usually demands a sophisticated solution, which raises system complexity. One such problem is how to reuse the shared infrastructure components in your microservices. Each of your services will probably have a distinct business logic, but it will also come with a big baggage of infrastructure code. These components usually don't change too much between your services - healthchecks, monitoring configs, logging, standard service configurations, etc. Fortunately, there is a very elegant solution for this problem for your Go services, which utilises the Fx Framework. It helps you by automatically managing your dependencies, but it can do much more than that as I'll show you in the upcoming sections. In this article, I will show you how to effectively extract your components into reusable & independent modules which can easily be shared across your Go services.
Continue Reading

Dependency Injection in Go using Fx

Dependency Injection in Go


This article is part of the series Dependency Injection in Go using Fx

When you initially start a Go project, your main function typically has a bunch of wiring code - initialising your routes, plugging in middlewares, initialising your template engines, loggers, etc.

This is one of the great things about Go - you don't have any magic happening behind the scenes. The code is all there and you can read it and debug it.

But as your software grows, you start feeling the growing pains - your main function starts becoming more and more convoluted. You start having all sorts of small bits and pieces plugged in here and there - healthchecks, database setup code, metrics, tracers, external API connections, etc etc.

And what if your application grows into a microservice architecture? What do you do when you have five different microservices demanding the same bunch of setup code, specific to your environment?

In this article, I will introduce you to Fx. It's a Go framework which solves both problems outlined above using dependency injection.

Let's jump in.

All the code from this article is available in this repo.

Continue Reading

My Experience with Learning Golang

golang-experiment

So you want to learn Golang?

Great! Perhaps I could help you. When I learnt I'd be joining Uber, I had some time to prepare for the tech stack ahead. One of the key things I had to get onboarded to quickly was coding in Golang.

So I started searching for good courses around the web, which could help with getting me caught up with the language and its paradigms. Some were great, others were pretty bad. And the bad part is, it isn't obvious at first glance.

Actually, some of the most promoted courses on Golang are some of the most useless ones. So learning Go can be quite frustrating due to the lack of good courses out there.

In this article, I will share what good, bad and ugly courses I've encountered in the bumpy ride of learning Go.

Continue Reading

Site Footer

BulgariaEnglish