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.
-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. +
+ ++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
-“foreign function interface” to allow safe calling of
-C libraries from Go code. SWIG extends this capability to C++ libraries.
+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.
+
+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.
+
+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. +
+ +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 @@ Thegccgo 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.