Go is a compiled and static typed programming language born from Google. Many of the core Go design and tool development team members have many years of experience in the field of programming language research.
map
and slice
are first-class citizens.
Go programmers are often called gophers.
In fact, although Go is a compiled and static typed programming language, Go also has many features which are usually only available in dynamic script languages. It is hard to combine these two kinds into one language, but Go did it. In other words, Go owns both the strictness of static languages and the flexibility of dynamic languages. I can't say there are not any compromises between the two, but the effect of the compromises is much weaker than the benefits of the combination in Go.
Readability is an important factor which affects the design of Go heavily. It is not hard for a gopher to understand the Go code written by other gophers.
Currently, the most popular Go compiler is written in Go and maintained by the Go design team.
Later we shall call it the standard Go compiler, or gc
(an abbreviation for Go compiler, not for garbage collection GC).
The Go design team also maintains a second Go compiler, gccgo
.
Nowadays it's use is less popular than gc
, but it always serves as a reference,
and both compilers are in active development.
As of now the Go team focuses on the improvement of gc
.
gc
is provided in Go Toolchain
(a set of tools for Go development maintained by Go team).
Go Toolchain 1.0 was released in March, 2012.
The version of Go is consistent with the version of Go Toolchain.
There were/are two major versions released each year.
Since the release of Go 1.0, the syntax of Go has changed a little,
but there were/are many improvements for the tools in Go Toolchain, from version to version,
especially for gc
.
For example, noticeable lags caused by garbage collecting is a common
criticism for languages with automatic memory management.
But since Go 1.8, improvements made for the concurrent garbage collection implementation
in gc
basically eliminated the lag problem.
gc
supports cross-platform compilation.
For example, we can build a Windows executable on a Linux OS, and vice versa.
Programs written in go language mostly compile very fast. Compilation time is an important factor for the happiness in development. Short build time is one reason why many programmers like programming with Go.
All the above advantages combined make Go an outstanding language and a good choice for many kinds of projects. Currently, Go is popularly used in network, system tools, database development and block chain development areas. With the introduction of custom generics in Go 1.18, it is expected that Go will be used more and more in some other areas, such as gui/game, big data and AI.
Finally, Go is not perfect in all aspects. There are certain trade-offs in Go design. And Go really has some shortcomings. For example, Go doesn't support arbitrary immutable values now, which leads to that many values which are not intended to be modified in standard packages are declared as variables. This is a potential security weak point for some Go programs.
The Go 101 프로젝트는 Github 에서 호스팅됩니다. 오타, 문법 오류, 부정확한 표현, 설명 결함, 코드 버그, 끊어진 링크와 같은 모든 종류의 실수에 대한 수정 사항을 제출하여 Go 101을 개선을 돕는 것은 언제나 환영합니다.
주기적으로 Go에 대한 깊이 있는 정보를 얻고 싶다면 Go 101의 공식 트위터 계정인 @go100and1을 팔로우하거나 Go 101 슬랙 채널에j가입해주세요.
reflect
표준 패키지sync
표준 패키지sync/atomic
표준 패키지