We can agree that Logstash is a powerful tool for log collection and processing. In fact, it’s design is so flexible, that it can be used for the processing of all sorts of data. With the various filter plugins it packs, one can easily extract structured data from raw text entries.
But as we all know — with great power comes great responsibility.
If you ever thought having to work with poorly written source code was hard to swallow, you have clearly not seen poorly written Logstash filters. …
Your team is developing the next generation software-as-a-service solution, which promises to revolutionize the software industry. You have been reading on all of the latest trends in cloud development — 12 factor apps, microservices, continuous deployment — you name it.
However, you quickly realize that operating such a software solution will not be a child’s play. With so many virtual machines or containers, running small software components written in various languages, it becomes impossible to troubleshoot issues without a proper logging and monitoring stack in place.
Concurrency, channels, cross-compilation are all concepts that come to mind when talking about Go — all aspects that make the language brilliant. There is one concept, however, that isn’t that much new but is quite important in Go as well — interfaces.
The fact that interfaces are implemented implicitly makes for a very flexible language, where modular pieces of code are a breeze to write.
That said, Go’s interfaces do have a kind of dark side to them — one that can easily catch newcomers by surprise and throw them off balance. Let me demonstrate this with an example.
What I am about to show you is one of those things you are most likely to use to show off to a friend but will rarely use in your daily activities.
So, considering you are using a Mac computer and have set your volume level to something reasonable, if you press the hardware volume down button numerous times, you will eventually reach the lowest volume level at which you can hear anything.
If you press the hardware volume down button again, you will have your sound output muted. This will be indicated by the following icon.
Anyone that tackles the Go programming language for the first time is bound to be confused by some of the design decisions behind the language. Backward declarations, method syntax, integrated concurrency, lack of inheritance can all be strange initially, to say the least.
Using the language for a while and you start to understand what the developers of Go were aiming at. Using it a bit more and you start to appreciate it. You start to see how lightweight go routines can be better than threads and how native concurrency features can make the code much more robust. …