Category Archives: Programming

Installing protobuf tools on MacOS

Installing protoc

Or follow different instructions. Installing grpc_cli Option 1. Easy way.

It is described here — https://github.com/grpc/homebrew-grpc. Option 2. Hard way — using cmake and make. NOT RECOMMENDED.

Or follow these instructions

Nice talk about concurrency in Go

Another good talk. It’s not only about channels, but also about atomics and patterns around ti. https://www.youtube.com/watch?v=YEKjSzIwAdA

Make your bot for telegram using go

It’s really not that difficult. Here are the docs: https://core.telegram.org/bots https://core.telegram.org/bots/api Here is a simple library in go for telegram — https://github.com/go-telegram-bot-api/telegram-bot-api/ (too simple, from my point of view, does not cover all functionality, but okay). And here is a skeletton for making your bots if you want it as just standalone binary — https://github.com/nezorflame/example-telegram-bot/

Gitlab-ci: build go app with docker as a docker image

Preparations [TO BE UPDATED LATER] My gitlab-ci.yml

My Dockerfile

Pulling from your private registry Create deploy token as described here. After that, you can do this:

Useful links: https://dev.to/hypnoglow/how-to-make-friends-with-golang-docker-and-gitlab-ci-4bil https://docs.gitlab.com/ee/ci/docker/using_docker_build.html https://medium.com/@tonistiigi/advanced-multi-stage-build-patterns-6f741b852fae https://docs.gitlab.com/ee/ci/yaml/ (full description of gitlab-ci.yml) https://about.gitlab.com/blog/2017/11/27/go-tools-and-gitlab-how-to-do-continuous-integration-like-a-boss/ https://gitlab.com/hypnoglow/example-go-docker-gitlab/blob/master/.gitlab-ci.yml Somewhat useful: https://blog.lwolf.org/post/how-to-build-tiny-golang-docker-images-with-gitlab-ci/ https://angristan.xyz/build-push-docker-images-gitlab-ci/ https://docs.gitlab.com/ee/user/packages/container_registry/#use-images-from-gitlab-container-registry https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-centos-7 (it says to do sudo usermod -aG docker …

Read more

Free weather APIs

https://openweathermap.org/api — old, odd, but works https://www.weatherbit.io/api https://developer.accuweather.com/accuweather-forecast-api/apis to be discovered https://darksky.net/dev/docs to be discovered http://api.weather2020.com/ to be discovered, looks abandoned https://www.aerisweather.com/support/docs/api/ works, but keys are for valid for 3 months only https://www.wunderground.com/api died (https://apicommunity.wunderground.com/weatherapi/topics/end-of-service-for-the-weather-underground-api)

Another cool article on using PostgreSQL+pgBouncer with go

Extremely interesting and very practical talk about problems occurring with go+pgBouncer (in Russian, sorry). https://habr.com/ru/company/oleg-bunin/blog/461935/ And a video on that: https://www.youtube.com/watch?v=Uojy57I-xP0

env-file parser for Goland

You can use env-file parser for running and debugging your app in Jetbrains’ products like Goland. It’s pretty simple and works. https://github.com/Ashald/EnvFile

How golang garbage collection works

It is a Mark-and-Sweep GC. Phases Mark Stop-the-World: Set write barrier (to know how much was allocated during maark phase) Concurrent: Mark all memory which is still in use by the app Stop-the-World: Remove write barrier Concurrent: Sweep (it actually happens on new allocations) Details/Algorithm It’s a tri-color process: grey for objects to check, black …

Read more

Style guide for golang project file structure

Highly recommended. It has a couple of odds like not explaining about /test dir (I assume, they wanted to say to put there only e2e and other integrational tests, not unit-test as the latter should be kept together with the code itself in files like …_test.go). But it’s awesome in general. https://github.com/golang-standards/project-layout

Golang patterns. Worker pool

Further reading: https://gobyexample.com/worker-pools