While there are various Go libraries that can create PDF such as Maroto, UniPDF, wkhtmltopdf etc, I have stumbled upon GoFPDF which offers the capability to create complicated PDF file and in this article, we will be looking at how we can generate invoice PDF using GoFPDF.

Note that GoFPDF is no longer maintained, but it continues to function and serve our purpose well in this article.

Let’s get started

First, we will create a page of A4 size in portrait mode and we also set the margins for the page. As we run pdf.AddPage(), the current position will move to the top…

Being the pioneer in introducing mini program in year 2017, WeChat has been very successful in building an ecosystem of online services running within single app. With that being said, you no longer need to install that many apps in your phone as there’s been more than 1 million mini programs developed by various merchants serving your different needs.

Since then, many Chinese tech giants, including Alipay have decided to jump on the bandwagon and introduce mini program into their respective ecosystem. It’s reported that Alipay had more than 160,000 mini programs in 2019 and it’s still counting.

What is mini program?

A mini…

The developer team in your organization has made some changes and it’s time to build and publish the npm package to the registry by executing npm publish. Although it’s not a heavy task, we can possibly automate this process so that we can take some workload off the shoulders of the developer team, leaving them to focus on what they do best!

Now, here’s what we can do. By using tools like Jenkins, Travis CI, CircleCI etc, we can publish the npm package to registry automatically upon changes made on the code in the repository.

However, we will get an…

Have you ever been in a situation where you need to rename a bunch of files that are all over the places? Or have you been in a situation where you want to copy files selectively but they are together with some other files and you can’t simply select all the files?

In our life or job, we may need to perform such tedious tasks which consume a lot of time and it’s best to automate these chores using lines of codes.

In this article, I have shared about how we can build a CLI-based file renaming tool using Golang…

With the capability to build lightweight yet efficient system, Golang has been getting a lot of attention from software engineers who use it to build backend services, microservices etc as well as DevOps engineers who use it as scripting language. FYI, Kubernetes is written in Go as well.

In this article, we will be looking at how to build a CLI-based tool to rename files in batch using spf13/cobra. …

Previously, we have looked into some CI/CD tools like Jenkins, GitHub Actions and TravisCI and in this article, we will be looking at automating deployment of containerized Go application to Google Kubernetes Engine (GKE) using another CI/CD tool, CircleCI.

Like some of the other CI/CD tools that we have covered earlier, CircleCI provides free plan for open source repository hosted on GitHub or Bitbucket which is ideal for us to experiment with.


  1. Open source repository hosted on GitHub / Bitbucket
  2. Google Cloud Console account
  3. Dockerfile and Docker Hub account
  4. kubectl installed on local machine
  5. CircleCI account

We will first deploy…

Note: This is part of a series that focuses on different CICD tools, where we will be looking at CircleCI next. If you are interested to know more about GitHub Actions, you can click here.

In this article, we are going to focus on two main things:

  1. What is Travis CI?
  2. How to setup Travis CI for Go project?

What is Travis CI?

Travis CI is a hosted continuous integration service that can be used on GitHub or Bitbucket repository.

As a continuous integration platform, Travis CI supports your development process by automatically building and testing code changes, providing immediate feedback on the success…

Note: This is part of a series that focuses on different CICD tools. In the upcoming posts, we will talk about other tools like Travis CI and CircleCI.

In this article, we are going to look at how we can use GitHub Actions for our Go project. Of course, it does need to be in Go, and it can be in any languages like Node.js, Python, Java etc. Also, it’s best that you can try it out on your own repository as we go through the following:

  1. What are GitHub Actions?
  2. Setting up the workflow to build, test, send a…

Have you ever experienced a situation where your development team has deployed a piece of code and ended up with errors in another part of the system? More often than not, we all have been in this problem before.

So how does one reduce the occurrence of such a situation? Do you have many testers in your organization to test every single function again and again whenever a new piece of code is released?

As we strive to deliver good quality software at speed, there is a need for proper need for continuous integration and continuous delivery (CI/CD) tools.

What is CI/CD?


After several weeks of studying and researching and a lot of trials and errors using Kubernetes, I managed to get things working. It is indeed quite a steep learning curve, especially for someone who has never put his hand on it.

In this article, I’m not trying to share a tutorial or guide, but it should be more like sharing experience or things that I have done on Kubernetes to make things work (so there may be mistakes or errors). Below are the items that I’m going to share:

  1. Setting up web-based Kubernetes UI
  2. Deploying containerized applications on Minikube
  3. Exposing…

Wilson Tan

Devops Engineer / Full-stack Developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store