From: Rob Pike Date: Mon, 16 Jul 2018 10:32:05 +0000 (+1000) Subject: doc: update Usage section of the FAQ X-Git-Tag: go1.11beta2~79 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b59b42cee8c1ca209dafd952da872fd493b77405;p=gostls13.git doc: update Usage section of the FAQ This is close to a complete rewrite, as the content was pretty old. The CL includes links to the Wiki for information about companies using Go, a new section about IDEs and editors¹, and a restatement of the foreign function interface story. It also modernizes and expands a little on the use of Go inside Google. ¹ Ed is the standard editor. Change-Id: I5e54aafa53d00d86297b2691960a376b40f6225b Reviewed-on: https://go-review.googlesource.com/123922 Reviewed-by: Ian Lance Taylor --- diff --git a/doc/go_faq.html b/doc/go_faq.html index 13dc43284e..bb8720ed11 100644 --- a/doc/go_faq.html +++ b/doc/go_faq.html @@ -210,11 +210,12 @@ easier to understand what happens when things combine.

Usage

-

Is Google using Go internally?

+

+Is Google using Go internally?

-Yes. There are now several Go programs deployed in -production inside Google. A public example is the server behind +Yes. Go is used widely in production inside Google. +One easy example is the server behind golang.org. It's just the godoc document server running in a production configuration on @@ -222,39 +223,109 @@ document server running in a production configuration on

-Other examples include the Vitess -system for large-scale SQL installations and Google's download server, dl.google.com, +A more significant instance is Google's download server, dl.google.com, which delivers Chrome binaries and other large installables such as apt-get packages.

+

+Go is not the only language used at Google, far from it, but it is a key language +for a number of areas including +site reliability +engineering (SRE) +and large-scale data processing. +

+ +

+What other companies use Go?

+ +

+Go usage is growing worldwide, especially but by no means exclusively +in the cloud computing space. +A couple of major cloud infrastructure projects written in Go are +Docker and Kubernetes, +but there are many more. +

+ +

+It's not just cloud, though. +The Go Wiki includes a +page, +updated regularly, that lists some of the many companies using Go. +

+ +

+The Wiki also has a page with links to +success stories +about companies and projects that are using the language. +

+

-There are two Go compiler implementations, gc -and gccgo. -Gc uses a different calling convention and linker and can -therefore only be linked with C programs using the same convention. -There is such a C compiler but no C++ compiler. -Gccgo is a GCC front-end that can, with care, be linked with -GCC-compiled C or C++ programs. +It is possible to use C and Go together in the same address space, +but it is not a natural fit and can require special interface software. +Also, linking C with Go code gives up the memory +safety and stack management guarantees that Go provides. +Sometimes it's absolutely necessary to use C libraries to solve a problem, +but doing so always introduces an element of risk not present with +pure Go code, so do so with care.

-The cgo program provides the mechanism for a +If you do need to use C with Go, how to proceed depends on the Go +compiler implementation. +There are three Go compiler implementations supported by the +Go team. +These are gc, the default compiler, +gccgo, which uses the GCC back end, +and a somewhat less mature gollvm, which uses the LLVM infrastructure. +

+ +

+Gc uses a different calling convention and linker from C and +therefore cannot be called directly from C programs, or vice versa. +The cgo program provides the mechanism for a “foreign function interface” to allow safe calling of -C libraries from Go code. SWIG extends this capability to C++ libraries. +C libraries from Go code. +SWIG extends this capability to C++ libraries. +

+ +

+You can also use cgo and SWIG with Gccgo and gollvm. +Since they use a traditional API, it's also possible, with great care, +to link code from these compilers directly with GCC/LLVM-compiled C or C++ programs. +However, doing so safely requires an understanding of the calling conventions for +all languages concerned, as well as concern for stack limits when calling C or C++ +from Go.

+

+What IDEs does Go support?

+ +

+The Go project does not include a custom IDE, but the language and +libraries have been designed to make it easy to analyze source code. +As a consequence, most well-known editors and IDEs support Go well, +either directly or through a plugin. +

+ +

+The list of well-known IDEs and editors that have good Go support +available includes Emacs, Vim, VSCode, Atom, Eclipse, Sublime, IntelliJ +(through a custom variant called Goland), and many more. +Chances are your favorite environment is a productive one for +programming in Go. +

-

+

Does Go support Google's protocol buffers?

A separate open source project provides the necessary compiler plugin and library. It is available at -github.com/golang/protobuf/ +github.com/golang/protobuf/.

@@ -2037,7 +2108,7 @@ The gccgo compiler implements goroutines using a technique called segmented stacks, supported by recent modifications to the gold linker. Gollvm similarly is built on the corresponding -LLVM infrastructure. +LLVM infrastructure.