This will be a series of tutorials about Go language. The first post is a bit boring and talks about the current Go ecosystem and the language’s overview. As well as its advantages and disadvantages. I’ve been working with Node.js for many years and then with Go within my latest projects. I’ve been programming since 10 years old for 25+ years (guessed my age?). I want to share what I learnt with you. I’ll go into the details of each piece of information here in this post afterwards, in the next posts. This post is here for giving you a quick overview of Go without going into the language specific details and tutorials. Open Source Language It’s an open source programming language from . Made its first stable release, 2011. Google Well, it’s created by Google as I said. However, even you can contribute to it by creating new proposals, fixing bugs, making it faster. It’s like a living being growing in front of you. If you’re curious, its source code is . What does it mean that it’s an open source programming language? hosted here on Github Who created Go? Robert Griesemer, Rob Pike and Ken Thompson. They started designing the language around 2007. The language open-sourced in 2009. Read more . here Go design inspired from languages like Algol, Pascal, C, Modula, Oberon, Smalltalk and Newsqueak. Go inherited mostly from Oberon language and its syntax is from C. Go’s OOP is more like Smalltalk but in Go, you can attach methods to any type. And concurrency is mostly from Newsqueak which is a language also from Rob Pike and heavily inpired from Hoare’s paper of CSP ( ). Communicating Sequential Processes Why they created Go? Fast languages like C, are difficult to work with and not safe. Compiling speed, dependencies and runtime errors are vast. Interpreted languages like Java and Ruby are safe but they’re slower and have many dependencies, one of them is the interpreter itself, the virtual machine which is needed to run the code. Javascript and Node.js is a wild kid; which is interpreted, weakly-typed and unsafe to work with ( . although there are some workarounds) Also, as an example, Java became too complex and verbose to write. There are many keywords which can be guessed from the context the language constructs inside in ( . Ruby is joyful to work with however it’s not designed for speed in mind. Javascript lets you free, go wild and slowly kills you ( . which is called inferring) maintainance nightmare, callback hell, no built-in solutions for safety) Programming in a compiled language like C is not fast because of the compilation step. However, working with an interpreted language like Ruby is fast, because it’s interpreted and you can see the results fast after you save the source code. Go removes all of these obstacles like safety, speed and ease of programming It works like an interpreted language because of the fast compilation. You’ll not notice that it’s compiling. You’ll think that as if you’re working in an interpreted language like Ruby. Fast results: : Strongly and statically typed and garbage collected. Strongly typed means: You can’t pass any type of data everywhere. You need to be explicit. Statically typed means: Compiler knows the type of every variable. Safe It’s concise, explicit and easy to read. Easy to work with: Built-in support in the language itself for multicore networked distributed applications and more. Modern: Go has idioms “Get the job done” : “One-way of doing things” It’s called idiomatic Go code. : “Being explicit” Explicitness is favored even it’s not DRY. Duplication is allowed sometimes. : “Build things by composing them” Do not inherit from other things, compose systems from simpler components. Although, it “inherits” this mantra from Unix philosophy. Who uses Go? There are at least 2 millions programmers in the . Go community Most notable companies are: Google, Docker, Dropbox, Heroku, Medium, Lyft, Uber, . and others Percentage of Stack Overflow questions for Go Most used and wanted languages in 2017 By GitHub Pull Requests https://www.tiobe.com/tiobe-index/ Also see: . Go 2016 Survey Results Some advantages of using Go: Go has the cutest mascot ever. OK…, Let’s see the real advantages. Compiled There is no VM. It which is fast, fast and fast ( ). compiles directly to the machine code did I say fast? . The programming language design is built for fast compilation in mind from the beginning. Fast compilation Compiles to OS X, Linux, Windows, 👉 and many . cross-platform others Creates only file output after the compilation without any dependencies, so that you can upload it anywhere which Go supports and just run it. Or just compile it there after you upload the code. one executable Safe Strong and static typed. . It cleans-up your dirt after you and integrates the whole garbage collection system into your executable binary. Garbage collected You can really create a very reliable software with Go. Because, the inherent language design prevents you from doing awful stuff with it. Reliable. For example: It has pointers but they’re mostly not dangerous as in C because the memory is being managed by Go and pointer arithmetic is not advised by default. Paradigms It’s an language. imperative Which is an advantage and a disadvantage to some people. Supports a different kind of I come from many OOP languages like Java, C#, Ruby, but, Go gets the best practices from OOP and lets you program differently, in a Go way. object-oriented programming (OOP). Go wants you to compose things not inherit like in other OOP langs. Supports ( . interfaces as in OOP) This helps composing things. Polymorphism rings a bell? Supports functional programming (FP). Concurrent . Built-in concurrency There are no heavy threads but channels . Almost all of the things built into ( like http fetching, json parsing, and encryption. So, this makes you faster and prevents fragmentation in the ecosystem ( . its standard library which is the library that comes with Go by default) most of the time) Tooling . Auto-formatting your code, checking race-condition issues, auto-documentation, test coverage reporting, refactoring tools etc. Great built-in command-line tools automatically rearranges your code for you after each save ( . Example Tool: go fmt if you configured that in your text editor) Before `go fmt` After `go fmt` makes suggestions to improve your Go code. Example Tool: go lint $ go lint nocomment.gonocomment.go:3:1: comment on exported function NoComment should be of the form "NoComment ..." Some disadvantages of using Go: Actually, I’m not counting this as a disadvantage although I put it here. Because, it lets you create very explicit code. Too much abstraction comes with a cost of difficult understanding the code. I’m not in the camp of generics support in Go. No generics support. However, Go team is still considering adding generics support to the language . About generics ( , there’s a about the beauty of Doom’s ( ) source code. Especially, read the part: “ ”, kind of) great article from Shawn McGrath the game Minimal Templates I couldn’t agree more. You need to check errors for each of the error producing function in your code explicitly. Again, for me, this is not a disadvantage, I love the explicitness of Go programs. There are some s to change error handling which I don’t like them at all. Err everywhere. proposal res, err := http.Client.Get(" ") http://ip.jsontest.com/ // there are no try-catch exceptions in Go, check errors explicitlyif err != nil {return err} // ... No support. function overloading Sometimes an advantage, sometimes a disadvantage. Strict rules. For example: Can feel little heavy when you have ever changing structs. as compared to other ecosystems like Node.js and Ruby. However, it’s increasing. Smaller number of packages Go packages Ruby and Nodejs packages Some links for more brain-food: My other posts about Go language Evolution of Go by Robert Griesemer Go Proverbs by Rob Pike Design of Go by Rob Pike Simplicity Complicated by Rob Pike Future of Go by Russ Cox Language Design in the Service of Software Engineering by Rob Pike You made it here! Thanks for reading! ❤️ Please Add claps! Share it on twitter ! 🐦 I’m mostly tweeting about Go: @inancgumus . 🔥 I’m creating an online course for Go: ! Join to my newsletter Let’s stay in touch weekly for new tutorials and for my online Go course. Originally published at medium.com on September 20, 2017 in “I’m Learning Go” publication, click this link to subscribe to the publication.