1. low learning curve. syntax similar to C, but it's simplified, high readability, standardized code-formatting, almost no syntax changes from older version to newer version, has compact language specification for whole language (only 79 A4 pages) compared to:
- C99 (550 pages)
- C++14 ($133; 814 pages for C++03, 1514 pages for latest working draft)
- Java7 (604 pages)
- Javascript (566 pages)
- D (548 pages)
- F# (300 pages)
- Scala (191 pages)
- Swift (552 pages)
- some others that doesn't have any standard
- data structure and algorithm benchmark
- memory access microbenchmark
- programming language implementation benchmark
- web framework benchmark
4. concurrency at language level, it's no doubt that concurrency is the trend (processor manufacturer now tend to adding more cores)
5. garbage collected, safe-pointer, contrast to manual memory management that can lead to buggy code (eg. memory leaks, buffer overflow attacks)
6. built-in utf8 string and maps (associative array), as other newer programming language also done (the Go programming language creator also the one that wrote utf8)
7. big company support (Google), other companies that have been using Go: Dropbox, Twitter, SoundCloud, etc, this leads to future job vacancy.
- Go users
- companies using Go for production
- major websites programming language
- programming language used in popular websites
- job vacancy growth (note that C, C++, Java are declining)
8. small memory footprint (unlike Java, that everything has 8-12 bytes overhead)
9. built-in package management, it's easy to distribute libraries, leads to many contribution.
10. simple cross compilation
11. autocomplete daemon, this leads to many editor/IDE support
12. built-in testing support (for TDD/BDD)
There's many other things that I personally like from Go:
- variable initial value always zeroed
- limited set of operator (no frustration when other people use too many operator with confusing precedence)
- no generics XD yes, I found C++'s template error message really painful, but templates are quite useful when writing generic data structures
- letter case visibility
- no function overloading
- statically linked
- no circular dependency
- no warnings, just errors