diff options
-rw-r--r-- | content/go1.6.article | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/content/go1.6.article b/content/go1.6.article new file mode 100644 index 0000000..bb8c09c --- /dev/null +++ b/content/go1.6.article @@ -0,0 +1,91 @@ +Go 1.6 is released +17 Feb 2016 + +Andrew Gerrand +adg@golang.org + +* Introduction + +Today we release [[https://golang.org/doc/go1.6][Go version 1.6]], +the seventh major stable release of Go. +You can grab it right now from the [[https://golang.org/dl/][download page]]. +Although [[https://blog.golang.org/go1.5][the release of Go 1.5]] six months ago +contained dramatic implementation changes, +this release is more incremental. + +The most significant change is support for [[https://http2.github.io/][HTTP/2]] +in the [[https://golang.org/pkg/net/http/][net/http package]]. +HTTP/2 is a new protocol, a follow-on to HTTP that has already seen +widespread adoption by browser vendors and major websites. +In Go 1.6, support for HTTP/2 is [[https://golang.org/doc/go1.6#http2][enabled by default]] +for both servers and clients when using HTTPS, +bringing [[https://http2.github.io/faq/][the benefits]] of the new protocol +to a wide range of Go projects, +such as the popular [[https://caddyserver.com/download][Caddy web server]]. + +The template packages have learned some new tricks, +with support for [[https://golang.org/pkg/text/template/#hdr-Text_and_spaces][trimming spaces around template actions]] +to produce cleaner template output, +and the introduction of the [[https://golang.org/pkg/text/template/#hdr-Actions][`{{block}}` action]] +that can be used to create templates that build on other templates. +A [[https://github.com/golang/example/tree/master#template-godoc][new template example program]] demonstrates these new features. + +Go 1.5 introduced [[https://golang.org/s/go15vendor][experimental support]] +for a “vendor” directory that was enabled by an environment variable. +In Go 1.6, the feature is now [[https://golang.org/doc/go1.6#go_command][enabled by default]]. +Source trees that contain a directory named “vendor” that is not used in accordance with the new feature +will require changes to avoid broken builds (the simplest fix is to rename the directory). + +The runtime has added lightweight, best-effort detection of concurrent misuse of maps. +As always, if one goroutine is writing to a map, no other goroutine should be reading or writing the map concurrently. +If the runtime detects this condition, it prints a diagnosis and crashes the program. +The best way to find out more about the problem is to run it under the +[[https://blog.golang.org/race-detector][race detector]], +which will more reliably identify the race and give more detail. + +The runtime has also changed how it prints program-ending panics. +It now prints only the stack of the panicking goroutine, rather than all existing goroutines. +This behavior can be configured using the +[[https://golang.org/pkg/runtime/#hdr-Environment_Variables][GOTRACEBACK]] environment variable +or by calling the [[https://golang.org/pkg/runtime/debug/#SetTraceback][debug.SetTraceback]] function. + +Users of cgo should be aware of major changes to the rules for sharing pointers between Go and C code. +The rules are designed to ensure that such C code can coexist with Go's garbage collector +and are checked during program execution, so code may require changes to avoid crashes. +See the [[https://golang.org/doc/go1.6#cgo][release notes]] and +[[https://golang.org/cmd/cgo/#hdr-Passing_pointers][cgo documentation]] for the details. + +The compiler, linker, and go command have a new `-msan` flag +analogous to `-race` and only available on linux/amd64, +that enables interoperation with the +[[http://clang.llvm.org/docs/MemorySanitizer.html][Clang MemorySanitizer]]. +This is useful for testing a program containing suspect C or C++ code. +You might like to try it while testing your cgo code with the new pointer rules. + +Performance of Go programs built with Go 1.6 remains similar to those built with Go 1.5. +Garbage-collection pauses are even lower than with Go 1.5, +but this is particularly noticeable for programs using large amounts of memory. +With regard to the performance of the compiler tool chain, +build times should be similar to those of Go 1.5. + +The algorithm inside [[https://golang.org/pkg/sort/#Sort][sort.Sort]] +was improved to run about 10% faster, +but the change may break programs that expect a specific ordering +of equal but distinguishable elements. +Such programs should refine their `Less` methods to indicate the desired ordering +or use [[https://golang.org/pkg/sort/#Stable][sort.Stable]] +to preserve the input order for equal values. + +And, of course, there are many more additions, improvements, and fixes. +You can find them all in the comprehensive [[https://golang.org/doc/go1.6][release notes]]. + +To celebrate the release, +[[https://github.com/golang/go/wiki/Go-1.6-release-party][Go User Groups around the world]] +are holding release parties on the 17th of February. +Online, the Go contributors are hosting a question and answer session +on the [[https://reddit.com/r/golang][golang subreddit]] for the next 24 hours. +If you have questions about the project, the release, or just Go in general, +then please join that discussion. + +Thanks to everyone that contributed to the release. +Happy hacking. |