On 22 September, we brought together the open source Go programming language community for the third time. As always, we started the evening with an intensive hands-on workshop, continued with three presentations and finished with good beer and networking.
Workshop on the Basics of development in Go by Jakub Kulhán
If you know any mainstream language like PHP or Java, Go won’t be unfamiliar to you. This workshop walked us through the basics of development in Go. We made a simple chat app while learning the unique features of the Go language. If you want to play around at home, install Go 1.6 (https://golang.org/doc/install) and IntelliJ IDEA (https://www.jetbrains.com/idea/) and the Go plugin (https://plugins.jetbrains.com/plugin/5047?pr=idea).
Reimplementing Manatee from C++ to Go by Radoslav Rábara
Manatee is a state-of-the-art corpus management system for searching gigabytes of text data. It is a single-threaded system written in C++ with great performance.
We learnt how Manatee was reimplemented on a concurrent system written in Go — what issues were solved, and what the results of this were.
Testing and Mocks by Peter Malina
Testing rapidly evolving systems is one of the major tasks in development these days. When one evolving system depends on another one, testing becomes nearly impossible due to the constant changes and bug findings.
Moreover, breaking the functionality of one system results in the inability to test all dependent systems. The answer to building a stable test model lies in creating mocks.
We talked about the mocking of simple services, HTTP back-ends using simple examples, and the pitfalls to avoid when using mocks.
Concurrency in Go and Erlang by Peter Lemenkov
The Go language is constantly being compared to Erlang and other concurrent languages and frameworks. Why didn’t one win over another? What makes Go so unique? Why does it have Goroutines, and not lightweight threads, greenlets or lightweight processes? What does quantum physics have in common with Golang?
In this talk we quickly outlined the strategic architectural differences between the two major approaches to concurrency in practical programming languages, and how they affect the “real life” development process.