Golang
Introduction
Go, also known as Golang, is a statically typed, compiled programming language designed at Google by Robert Griesemer, Rob Pike, and Ken Thompson. Go is syntactically similar to C, but with memory safety, garbage collection, structural typing, and CSP-style concurrency.
History
The Go programming language was announced in November 2009 and is used in some of Google's production systems. Go's "gc" compiler targets the Linux, macOS, Windows, various BSD and Unix versions, and also, since version 1.5, mobile devices, including smartphones.
Design
Go was designed to address criticism of other languages in use at Google, but its use has spread to many other organizations. The language designers were primarily motivated by their shared dislike of C++. Go was designed to be simple to understand and write. It is a statically typed language with a syntax loosely derived from that of C, adding garbage collected memory management, type safety, some dynamic typing capabilities, additional built-in types such as variable-length arrays and key-value maps, and a large standard library.
Syntax
The syntax of Go is similar to that of C, but with significant changes made to improve brevity, simplicity, and safety. Go has a number of built-in types, including numeric ones (byte, int64, float32, etc.), booleans, and character strings (string). Strings are immutable; built-in operators and keywords (rather than functions) provide concatenation, comparison, and UTF-8 encoding/decoding. Record types can be defined with the struct keyword.
Concurrency
One of the most significant features of Go is its support for concurrency. Go's concurrency model is based on the Communicating Sequential Processes (CSP) paper published by Tony Hoare in 1978. The language specification itself features a built-in goroutine and channel types, which are used to implement CSP-style concurrency.
Criticism
Despite its success and adoption by many organizations, Go has been criticized for lacking certain features common in other modern languages. The lack of a traditional exception-handling construct is a notable example. Instead, Go encourages the use of multiple return values to indicate errors.
Adoption
Go is recognized for its simplicity, and its users frequently cite its ease of use, robustness, and efficiency as reasons to choose the language. Some of Go's largest users include Google, Uber, Twitch, Dropbox, among others. It is also used in startups in Silicon Valley.