Paradigm | Multi-paradigm: concurrent imperative, functional[1] object-oriented[2][3] |
---|---|
Designed by | Robert Griesemer Rob Pike Ken Thompson[4] |
Developer | The Go Authors[5] |
First appeared | November 10, 2009 |
Stable release | 1.23.1
/ 5 September 2024 |
Typing discipline | Inferred, static, strong,[6] structural,[7][8] nominal |
Memory management | Garbage collection |
Implementation language | Go, Assembly language (gc); C++ (gofrontend) |
OS | DragonFly BSD, FreeBSD, Linux, macOS, NetBSD, OpenBSD,[9] Plan 9,[10] Solaris, Windows |
License | 3-clause BSD[5] + patent grant[11] |
Filename extensions | .go |
Website | go |
Major implementations | |
gc, gofrontend | |
Influenced by | |
C, Oberon-2, Limbo, Active Oberon, communicating sequential processes, Pascal, Oberon, Smalltalk, Newsqueak, Modula-2, Alef, APL, BCPL, Modula, occam | |
Influenced | |
Crystal, V |
Go is a statically typed, compiled high-level programming language designed at Google[12] by Robert Griesemer, Rob Pike, and Ken Thompson.[4] It is syntactically similar to C, but also has memory safety, garbage collection, structural typing,[7] and CSP-style concurrency.[13] It is often referred to as Golang because of its former domain name, golang.org
, but its proper name is Go.[14]
There are two major implementations:
A third-party source-to-source compiler, GopherJS,[20] compiles Go to JavaScript for front-end web development.
Go supports first class functions, higher-order functions, user-defined function types, function literals, closures, and multiple return values. This rich feature set supports a functional programming style in a strongly typed language.
Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy.
Go is Object Oriented, but not in the usual way.
Go has structural typing, not duck typing. Full interface satisfaction is checked and required.
The language is called Go.
The compiler and runtime are now implemented in Go and assembler, without C.
Ada, Go and Objective-C++ are not default languages
Cite error: There are <ref group=lower-alpha>
tags or {{efn}}
templates on this page, but the references will not show without a {{reflist|group=lower-alpha}}
template or {{notelist}}
template (see the help page).