Add header to every request in Go

Making changes to all HTTP requests can be handy. You may want to add an API key or some information about the sender like app version etc. No matter why you want to do that you have a few options to achieve the goal. The first approach is building a factory method that will add the required header. func newRequest(endpoint string) *http.Request { req, _ := http.NewRequest(http.MethodGet, fmt.Sprintf("https://%s", endpoint), nil) req.


Unavailability is fine. Prepare for it

When I started my career as a software developer and published the first production application what I did was staring at logs and look for some fatal errors. It was a monolith application. Every log saying that something’s wrong had to be fixed. ASAP. This approach worked for some time. However, when the scale increased, and I started building microservices, I couldn’t get rid of all of them. Network issues, database failures, and more - it happens all the time.


Pointer and value semantics in Go

In Go, we can refer to variables using value or pointers. Sometimes, it’s hard to answer which approach is more suitable. At the first place, you should learn about general rules. Value semantic should be used every time when copying the value make sense in the logic of your code. For example, every value object should be passed by value. If you have a struct Money then it’s possible (and also make sense) to have, at the same time, multiple 10$ in your code.


What you should know about Go slices

Slice is the most important data structure in Go. When it comes to performance, slices are going to beat any other data structure. They are simple but powerful. However, there are some gotchas you have to keep in mind. Today, I’ll explain how slices work to help you prevent some hard to find bugs and write better code. In Go, arrays have a fixed size. The length is part of the array’s type.


Using sync.Pool

In the garbage-collected world, we want to keep the GC overhead as little as possible. One of the things we can do is limiting the number of allocations in our application. How to achieve that? There’s sync.Pool which caches allocated but unused items for later reuse. The Pool can become very useful when you have multiple parallel operations that can share the same piece of memory between them. The real power of it is visible when you have frequent allocations and deallocations of the same data structure.


OAuth2 and Go

OAuth 2.0 is the industry-standard protocol for authorization. Go has built-in support for this protocol and today we’ll build a simple application. The application will use the Facebook API to authorize a user. If you need to clarify what oauth2 is and how it works you can take a look at the introduction from DigitalOcean. There are some videos as well. The very first step of building our program is creating a new Facebook application.


Garnish - simple varnish implementation written in Go

The varnish is a well-known HTTP accelerator. As the continuation of the GoInPractice series, today I’ll show how you can build a simple (and naive) varnish implementation in Go. Some of the code is reused from Writing a reverse proxy so if you don’t understand something, I recommend taking a look at the blog post. We’ll split our project into a few parts. The first one will be the caching mechanism.


Summary of 2019

This is the very first time I write a summary of a year. I feel that today is the day I should start doing it and that some digits may be interesting for some people. The biggest change I made this year was changing the blogging platform to Hugo and focused more on Go content. I continued organizing GoCracow meetup. This helped me become a Google Developer Expert in Go category.


I want to learn Go - how to start?

You can find a lot of materials about Go (including this blog) but it’s hard to find the best place to start. This article’s goal is to sum up the most valuable materials I found to help others. I focus only on free materials. Fundamentals The Go tour - IMO the absolutely must do. You can try Go without installing it. You’ll learn some basic syntax and concepts step by step, Go by example - if you’re confused how to use a certain part of the language it’s possible you’ll find an example of it on this page.


Writing a reverse proxy in Go

Some time ago, I found a video called Building a DIY proxy with the net package. I recommend watching it. Filippo Valsorda builds a simple proxy using low-level packages. It’s fun to watch it but I think it’s a bit complicated. In Go, it has to be an easier way so I decided to continue writing series Go In Practice by writing a simple but yet powerful reverse proxy as fast as it’s possible.