UUID without dependencies in Go · · Go glide

Today I realized that size of my vendor/ folder in Golang project is around 150M. I am using glide there. There are 24 dependencies (it’s a program with multiple data storage connectors, notifications, etc.), so I decided to review it and reduce amount of 3rd party libraries.

First of all I have checked glide-report and removed 2 unused packages. Go-world has a lot of packages that are awesome and can save your time, but not your program’s performance. I found few packages which I am using as helpers. For example gouuid.

Read more

Concurrency. Data race · · Go Concurrency

What does data race mean in Golang? Data race is a common mistake in concurrent systems. A data race occurs when two goroutines access the same variable concurrently and at least one of the accesses is a write. It’s really hard to recognize it without specific tools or without an eagle eye, because when you run a program it’s always a chance that you won’t see your mistake or it will be very transparent.

Read more

Working with ClickHouse in Go. Part 1: Basics · · Go ClickHouse

CLickHouse

ClickHouse is an open-source column-oriented database management system that allows generating analytical data reports in real time. Created by Yandex developers for internal purposes, but then has migrated as open-source tool. It currently powers Yandex.Metrica, world’s second largest web analytics platform, with over 13 trillion database records and over 20 billion events a day, generating customized reports on-the-fly, directly from non-aggregated data. So it is really fast.

Read more

Game Of Logs: 2 tests about Go · · Go LogPacker

GameOfLogs

In LogPacker we have prepared 4 interactive tests, 2 for Golang and 2 for Docker. Enjoy and share results!

Golang War I

Golang War II

Read more

Working with DB nulls in Golang · · Go DB

This post shows how to marshall NULL values from the database into Go struct and how to avoid mistakes during fetching optional values with SELECT query. I’ll show standard types sql.NullString, sql.NullInt64, etc types.

Read more

GoMobile: Library development for IOS/Android · · Mobile Go LogPacker Android Java iOS

Gomobile

Read full article

Cross platform development of mobile applications was quite popular back then. This approach was used by most companies in the time of mobile branch establishment. The main reasons for using this approach were simple – lack of professionals in the market, slow development speed and unreasonable cost. Unfortunately, in most cases this approach did not justify itself. But why not to give that approach the second chance? Technology took a big step forward and theoretically we can get a high-quality product. In this article we’ll review in practice how to develop Library for iOS/Android in Golang and have a look at the problems and constraints faced in the development process.

Read more

How to collect Mobile crash logs · · Go Logs LogPacker

Mobile

Read more

Optimize Go binary size · · Go ldflags

~21MB

Well, I found yesterday that LogPacker Daemon weights about 21MB. This application is written in Go language, it’s really doing a lot of things, has built-in connectors to different Data-Storages, has Cluster solution inside, etc.

Some people are complaining about huge size of Go compiled binaries. But it makes sence, Go includes debugging information into binary for GDB.

go build logpacker_daemon.go && du -h logpacker_daemon
21M	logpacker_daemon
Read more

LogPacker mobile SDK · · Mobile Go LogPacker Android Java iOS

GoAndroid

This article is an addition to the post how to launch LogPacker Cluster for free.

Goals

We started to collect logs from mobile devices, currently on Android and iOS. Since Go 1.5 gomobile tool can create a bindings for Java/Objective-C/Swift. Yes, it’s not possible for Windows Phone. Main LogPacker application is written in Go, so we decided to write Mobile SDK in Go too, because it’s cheaper for us.

Read more

Golang test · · Go Testing

30 basic questions to measure your Golang knowledge. Answers and .go files you can find on GitHub page.

Don’t hesitate to create a Pull Request in case of some found errors, typos.

Read more