DEV Community

Cover image for Go history
Igor
Igor

Posted on

Go history

Go was conceived in September 2007 by Robert Griesemer, Rob Pike, and Ken Thompson, all at Google, and was announced in November 2009.

Go is especially suited for building infrastructure like networked servers, and tools and system for programmers.

Go is an open-source project, so source code for its compiler, libraries, and tools is freely available to anyone.

Go history tree

Go is described as a “C-like language”. From C, Go inherited its expression syntax, control-flow statements, basic data types, call-by-value parameter passing, pointers, and above all, C’s emphasis on programs that compile to efficient machine code.

Modula-2 inspired the package concept. Oberon eliminated the distinction between module interface files and module implementation files. Oberon-2 influenced the syntax for packages, imports, and declarations, and Object Oberon provided the syntax for method declarations.

In CSP (or Communicating sequential process), a program is a parallel composition (simultaneous execution of computations) of processes that have no shared state; the process communicate and synchronize using channels. Hoare’s CSP was a formal language for describing the fundamental concepts of concurrency, not a programming language for writing executable programs.

Pike and others began to experiment with CSP implementations as actual languages. They created Squeak, which provided a language for handling mouse and keyboards events, with statically created channels. It was a purely functional language with garbage collection. Channels became first-class values, dynamically created and storable in variables.

Go’s innovative slices provide dynamic arrays with efficient random access but also permit sophisticated sharing arrangements reminiscent of linked lists.

It has Garbage Collection, a package system, first-class functions, lexical scope, a system call interface, and immutable string in which text is generally encoded in UTF-8.

Its built-in data types and most library data structures are crafted to work naturally without explicit initialization or implicit constructors, so relatively few memory allocations and memory writes are hidden in the code. Go’s aggregate types (structs and arrays) hold their elements directly, requiring less storage and fewer allocations and pointer indirections than languages that use indirect fields. Go has concurrency features based on CSP. The variable size stacks of Go’s lightweight threads or goroutines are initially small enough that creating one is cheap and creating a million is practical.

Top comments (0)