I think I falling in love for the first time after years of software development. I believe it should happen at least once to each software engineer, who truly loves what he does.
It wasn’t love from the first sight. I felt something strange, something completely different from knowledge i gain till this point. But sometimes people prefer their warm and very familiar comfort zone. And this was the case why our date was over then.
Since i remember my career, I always have been developed in OOP: C#, Java/Android. And any other approach felt like i have to leave cozy comfort zone of mine for something unfamiliar and risky, something questionable to invest my free time. I have a wife and lovely twins after all.
By the way i really encourage starting from there, since it’s the best overview to get familiar with Go concepts and approaches. Clear explanation along with great code examples will provide you great starting point.
Anyway i was amazed by Go’s different paradigms, its approaches and most of all from idea of language that was created with taking concurrency in mind. Actually its the right time to explain little bit what i have discovered:
- Language was developed in 2007 by Google engineers.
- Was announced by Google in November 2009
- It is complete opensource.
- Go supported by Google Cloud
- Great build-in documentation and lot of libraries out-of-the-box
- Garbage collection, type safety and some dynamic capabilities
- Avoid stop-the-world GC pauses with no delays
- Have no classes at all
- Intentionally designed without any inheritance at all. Use composition instead.
- Function may return more then one value. Such ability does not exist in C# or Java.
- Working with Go routines (represent thread) is really easy and have ability to exchange data between them by using channels.
- There is no possibility to use undefined variables.
- Interesting idea of visibility : function or member starting with capital letter become visible to other packages (public modifier in C#). Small letter indicate no visibility from outside (private modifier in C#)
Some thoughts at this moment:
It looks to me Go has a lot of potential. Language itself do efforts you write cleaner and understandable code by applying it’s rules. For example there is no possibility to use undefined variables, what is possible in C# and leads to less readability and message.
Since Go become part of Google’s infrastructure it smells like relative stability to me. Besides, company has a lot of experiences in enterprise software development as well as in concurrency fields, meaning they try to implement their extensive knowledge in Golang.
Although it feels different from what i used to, but looks like going to invest a lot of time with this language.