The State of Go
Where we are in June 2014
Looking back on the first months.
The complaints started right away…
The first HN thread about Go was mostly an argument about braces and indentation.
The first public language change (Dec 10, 2009):
Today there are 48 active user groups in 15 countries across 5 continents.
Community-driven. 3 days. 700 attendees. 24 talks. 1 panel. 4 hours of lightning talks!
Released last Wednesday, 18 June 2014.
Due December 1st, 2014.
What might be in it? (Speculative list follows.)
A means for a repository to specify its canonical import path.
Goal: stop people from checking out repos from the wrong path.
"camlistore.org" -> "camlistore.googlesource.com/camlistore"
"An import of a path containing the element “internal” is disallowed if the importing code is outside the tree rooted at the parent of the “internal” directory."
/a/b/c/internal/d/e/fcan be imported only by code in the directory tree rooted at
$GOROOT/src/pkg/internal/xxxcan be imported only by other code in the standard library (
$GOPATH/src/mypkg/internal/foocan be imported only by code in
Move the standard library from
$GOROOT work just like
(Not a big deal for most, but a nice clean up for the core.)
Throttling of access to the file system at the
os package level.
Make it work just as nicely as it does with the network.
A convenience for generating Go source code. Example uses:
Add generator directive in Go source files:
//go:generate yacc -o gopher.go gopher.y
Use the Go tool to execute the directives:
% go generate [packagepath]
cmd/gosupport for embedded data files
The transition from C to Go continues:
cmd/gctranslated to Go
Rough estimate: 10-20% overall speedup, 20-50% GC pause reduction, 5-10% RSS reduction.
C to Go:
reflect.Valueback to 3 words
Go support for the NDK. (Like C/C++ today, but better!)
Goal: enough support for writing games.
Based on the work of Elias Naur and others in the community.