Latest News

Wednesday, March 6, 2019

An overview of Golang


Open Source Language
Go is an open source programming language from Google. Made its first stable release, 2011.

What does it mean that Go is an open source programming language?
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.

Who created Go?
Robert Griesemer, Rob Pike and Ken Thompson. They started designing Go language around 2007. Go language open-sourced in 2009.

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 inspired by 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. An interpreted language like Ruby is safe but it’s slower and has many dependencies, one of them is the interpreter itself. Also, for Java, for example, a virtual machine is needed to run the code. Javascript and Node.js are wild kids; which are interpreted, weakly-typed and unsafe to work with (although there are some possible directions like TypeScript or compiling directly to Javascript from other safer languages).

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 (which is called inferring). 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 (maintenance nightmare, callback hell (the world before async await), no built-in solutions for safety).

For example, C language compiles very quickly, however, the language itself has not been designed to be compiled very fast (I’m not talking about the compiler here), so, C programmers can misuse the language facilities to create slow compiling programs. In Go, however, it’s been designed for fast compilation in mind from the beginning. So, it’s hard for Go programmers to create slow compiling programs as compared to other languages like C or C++.

Go removes all of these obstacles like safety, speed, and ease of programming
  • Fast results: 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.
  • Safe: 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. In Go there are no implicit type conversions, for example, uint8 and uint16 are different types (except in some cases).
  • Easy to work with: It’s concise, explicit and easy to read.
  • Modern: Built-in support in the language itself for multi-core networked distributed applications and more.


Some advantages of using Go:
Compiled
  • There is no VM. It compiles directly to the machine code (if we exclude Go’s intermediary assembly) which is fast, fast and fast (did I say fast?).
  • Fast compilation. The programming language design is built for fast compilation in mind from the beginning.
  • Compiles cross-platform to OS X, Linux, Windows, and many others.
  • Creates only one executable 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. No dependency hell.


Safe
  • Strong and static typed.
  • Garbage collected. It cleans up your dirt after you and integrates the whole garbage collection system into your executable binary.
  • Reliable. You can really create a very reliable software with Go. Because the inherent language design prevents you from doing awful stuff with it. For example, It has pointers but they’re mostly not as dangerous as in C because the memory is being managed by Go and pointer arithmetic is not advised by default. However, this reliability is only for the compilation part, in runtime, nasty things can happen, if you want maximum run-time reliability, you may prefer, for example, Rust instead.


Paradigms
  • It’s an imperative language which is an advantage and a disadvantage to some people.
  • Supports a different kind of object-oriented programming (OOP). 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.
  • Supports interfaces (as in OOP). This helps to compose things. Does “Polymorphism” ring a bell? Go does not force you to mark your types as “implements this and that interface”, it infers this from the functionality the type supports. This increases flexibility and composability.
  • Go lets you attach functions to any type. This flexibility lets you compose your programs from smaller things. When a type implements the functions of an interface it’s said that the type satisfies that interface and can be used in places that desire that interface.
  • Supports functional programming (FP). For example, Go supports anonymous functions, closures, and first-class functions.


Concurrent
  • Built-in concurrency. There are no heavy threads but channels.
  • Ability to program and structure your programs in a synchronous manner but actually it’s asynchronous. Channels hide that complexity and let you structure your programs in a more maintainable way.


Standard Library
  • Almost all of the things built into its standard library (which is the library that comes with Go by default) like HTTP fetching, JSON parsing, and encryption. So, this makes you faster and prevents fragmentation in the ecosystem (most of the time).


Tooling
  • Great built-in command-line tools. Auto-formatting your code, checking race-condition issues, auto-documentation, test coverage reporting, refactoring tools etc.


Some disadvantages of using Go:

  • No generics support. Actually, I’m not counting this as a disadvantage although I put it here. Because it lets you create a very explicit code. Too much wrong abstraction comes with a cost of difficult understandability. Generics are good to some extent however they’re very open to misuse and I’ve seen this in action for years. So, I’m not in the camp of generics support in Go. However, the Go team is still considering adding generics support to the language.
  • Err everywhere. You need to check errors for each of the error producing function in your code explicitly. However, I love the explicitness of Go programs. In the upcoming years maybe we’d find an elegant solution for this. There are some proposals to change error handling.
  • No overloading support. However, it can be imitated to some extent by type assertions.
  • Strict rules. Sometimes an advantage, sometimes a disadvantage. For example: Can feel little heavy when you have ever-changing structs. However, most of these rules can be overridden by using Go’s reflection capabilities.
  • Not so strong runtime safety. However, Go doesn’t bring the level of safety, for example, Rust provides. Go’s safety is for compile-time only and only to some extent for runtime (for example forbidden pointer arithmetic). So, if you’re looking also for the runtime safety, look to Rust. Go cares more about the productivity of programmers. Go = fast to production, Rust = safety in production. 
  • Smaller number of packages as compared to other ecosystems like Node.js and Ruby. This is because Go’s standard library is full of features which mostly doesn’t need third-party support. However, the number of packages are increasing.


About Us
TMA Solutions was established in 1997 to provide quality software outsourcing services to leading companies worldwide. We are one of the largest software outsourcing companies in Vietnam with 2,400 engineers. Our engineering team was selected from a large pool of Vietnam IT resources; they are well-trained and have successfully completed many large and complex projects. Visit us at: https://www.tmasolutions.com/

No comments:

Post a Comment

Tags

Recent Post