Type Conversion and Type Assertion in Golang - Everything You Need to Know (With Examples)

When programming in Go, using types is one of the most fundamental language features that we use. Occasionally, we will need to convert between types and interfaces. For example, we may need to convert an int type to a long type. Or maybe we have to convert a string to a []byte type. In this article, we will see how to convert between types in Go, and when to use type assertions and type conversions....

Last Updated:   · Soham Kamani

A Guide On SQL Database Transactions In Go

This article explains what SQL database transactions are, and how to implement them in Go (Golang). Transactions are very useful when you want to perform multiple operations on a database, but still treat them as a single unit. We will go into detail on why this is useful, and how you can use it in your Go applications. To illustrate our examples, we will use Postgres as our database of choice....

 · Soham Kamani

Making an interactive Telegram bot in Go (Golang)

This tutorial will go through a straightforward set of steps to get a responsive telegram bot up and running from scratch in Golang I spent a considerable amount of time figuring out how to make a functional telegram bot. I mean sure, the official introduction is good, but theres a lot of stuff about what bots are, and a few scattered instructions about the API, but not enough of structure for a beginner to get up and running quickly....

 · Soham Kamani

Functional Options in Go: Implementing the Options Pattern in Golang

This post talks about what functional options are in Go, and how we can use the options pattern to implement them. Functional options take the form of extra arguments to a function, that extend or modify its behavior. Here’s an example which uses functional options to create a new House struct: h := NewHouse( WithConcrete(), WithoutFireplace(), ) Here, NewHouse is a constructor function. WithConcrete and WithFireplace are options passed to the constructor to modify it’s return value....

 · Soham Kamani

Command Pattern in Go (Golang)

This article will explain the command pattern, where to use it, and how to implement it in Go. The command pattern, as the name suggests, is used when we want to create and execute “commands”. Different commands have their own implementation, but have the same steps for execution. The Command Interface The basic unit for implementing the command pattern is the Command interface: type Command interface { execute() } If the command can error out, the interface can contain an error return value as well:...

 · Soham Kamani

A Comprehensive Guide of Arrays and Slices in Golang (and their differences)

At first, it’s easy to see arrays and slices as the same thing: a data structure to represent collections. However, they are actually quite different from one another. In this post we will explore their differences and implementation in Go. We will then look at some examples so that you can make a more informed decision on when to use them. Arrays An array is a fixed collection of data. The emphasis here is on fixed, because once you set the length of an array, it cannot be changed....

 · Soham Kamani

Golang functions vs methods 👯‍♀️

This post will describe the key differences between functions and methods in Go, and when it’s best to use them. Functions and methods are both used extensively in Go to provide abstractions and make our programs easier to read and reason about. On the surface, functions and methods both look similar, but there are some important semantic differences which can make a big difference to the readability of your code....

 · Soham Kamani

Polymorphism in Go - without interfaces 🦆

Ok, so you want to use polymorphism in Go, but don’t like interfaces? Read on… First, let’s see what we want to do: var dog, duck *Animal dog = NewDog("fido") duck = NewDuck("donald") fmt.Println(dog.makeNoise()) // fido says woof! fmt.Println(duck.makeNoise()) // donald says quack! Here, dog and duck are of the same type (*Animal). Each variable is instantiated with a different constructor, and they have different behaviours when the same method makeNoise is called....

 · Soham Kamani

Implementing JWT based authentication in Golang

In this post, we will learn how JWT(JSON Web Token) based authentication works, and how to build a server application in Go to implement it using the golang-jwt/jwt library. If you already know how JWT works, and just want to see the implementation, you can skip ahead, or see the source code on Github The JSON web token (JWT) allows you to authenticate your users in a stateless manner, without actually storing any information about them on the system itself (as opposed to session based authentication)....

Last Updated:   · Soham Kamani

Golang Omitempty Explained

If you’ve worked with Go for sometime, you have probably encountered the omitempty tag, when trying to encode a struct to JSON. This post will explain what exactly the omitempty tag means, and some common pitfalls, along with ways to get around them. Basic Usage When using Go to build web applications, or HTTP servers, there will eventually come a time when we need to encode some data as JSON. The problem here is that the JSON representation does not exactly match the way Go handles data....

 · Soham Kamani