Category Archives: Programming

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

func worker(id int, jobs

PgBouncer and prepared statements

In our system, we use connection pooler called PgBouncer as a proxy to PostgreSQL server. PgBouncer has two main modes Session pooling mode This mode is less performant (it’s a default mode). When a client connects, a server connection will be assigned to it for the whole duration it stays connected. So it does not …

Read more

Golang: testing http and grpc servers

HTTP server is quite easy to test — here is a nice video about it:

Count lines in git repository

git ls-files | xargs wc -l https://stackoverflow.com/questions/4822471/count-number-of-lines-in-a-git-repository

Algorithms to find fastest route through network

This is a great article on that — https://www.redblobgames.com/pathfinding/a-star/introduction.html (in russain). It tells about Dijkstra, Breadth-first, Greedy and A* algorithms. It’s all about optimization of one travel. To optimize your entire network you should try to use Aint Colony algorithm — http://rain.ifmo.ru/cat/data/theory/unsorted/ant-algo-2006/article.pdf (it’s in russian). Another link to this PDF file — aca

How go code is being compiled to assembler code

https://go.godbolt.org/z/31FyJ3 I was interested in comparing line 15 vs line 17 of the following code: package main import «fmt» type kv struct { key []byte value []byte } type sliceMap []kv func (sm *sliceMap) Add(k, v []byte) { kvs := *sm if cap(kvs) > len(kvs) { kvs = kvs[:len(kvs)+1] } else { kvs = append(kvs, …

Read more

E2E tests in go

I tried it via ginkgo and gomega. It has Agouti with WebDriver support out of the box, but I didn’t use it as we have grpc API. That’s the example (table tests): var _ = Describe(«GetRoute», func() { var ( srClient sr.Client srErr error ) JustBeforeEach(func() { srClient, srErr = GetClient() }) DescribeTable(«positive cases», func(fromGeoPointID, …

Read more

ORM for go

https://github.com/Masterminds/squirrel Never used it as we always write SQL queries manually. But looks okay for ORM (well, actually a query-builder).

How to make grpc call from shell

1 https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md grpc_cli call localhost:7020 ChatAPI.GetChats «external_user:{id:’30594028′,type:1}, limit:10, offset:0, order:ORDER_DESC, requested_by_external_user:{id:’30594028′,type:1},with_unread_count:true» 2 https://github.com/fullstorydev/grpcurl grpcurl -plaintext -emit-defaults -d ‘{«lozon_id»: 15515160432000}’ -H ‘User-Name: grpcurl’ localhost:7020 points/FindPointByLozonID