blob: cc227bbac25c31cd848c9479c00b0ecca84d6cce [file] [log] [blame]
<!-- Release History -->
<h2 id="Releases">Release History</h2>
<p>This page summarizes the changes between tagged releases of Go.
For full details, see the <a href="">Mercurial change log</a>.</p>
<h3 id="2010-08-11">2010-08-25</h3>
This release includes changes to the build system that will likely require you
to make changes to your environment variables and Makefiles.
All environment variables are now optional:
- $GOOS and $GOARCH are now optional; their values should now be inferred
automatically by the build system,
- $GOROOT is now optional, but if you choose not to set it you must run
'gomake' instead of 'make' or 'gmake' when developing Go programs
using the conventional Makefiles,
- $GOBIN remains optional and now defaults to $GOROOT/bin;
if you wish to use this new default, make sure it is in your $PATH
and that you have removed the existing binaries from $HOME/bin.
As a result of these changes, the Go Makefiles have changed. If your Makefiles
inherit from the Go Makefiles, you must change this line:
include ../../Make.$(GOARCH)
to this:
include ../../
This release also removes the deprecated functions in regexp and the
once package. Any code that still uses them will break.
See the notes from the last release for details:
Other changes:
* 6g: better registerization for slices, strings, interface values
* 6l: line number information in DWARF format
* build: $GOBIN defaults to $GOROOT/bin,
no required environment variables
* cgo: add C.GoStringN (thanks Eric Clark).
* codereview: fix issues with leading tabs in CL descriptions,
do not send "Abandoned" mail if the CL has not been mailed.
* crypto/ocsp: add missing Makefile.
* crypto/tls: client certificate support (thanks Mikkel Krautz).
* doc: update gccgo information for recent changes.
fix errors in Effective Go.
* fmt/print: give %p priority, analogous to %T,
honor Formatter in Print, Println.
* gc: fix parenthesization check.
* go/ast: facility for printing AST nodes,
first step towards augmenting AST with full type information.
* go/printer: do not modify tabwriter.Escape'd text.
* gofmt: do not modify multi-line string literals,
print AST nodes by setting -ast flag.
* http: fix typo in http.Request documentation (thanks Scott Lawrence)
parse query string always, not just in GET
* image/png: support 16-bit color.
* io: ReadAtLeast now errors if min > len(buf).
* jsonrpc: use `error: null` for success, not `error: ""`.
* libmach: implement register fetch for 32-bit x86 kernel.
* net: make IPv6 String method standards-compliant (thanks Mikio Hara).
* os: FileInfo.Permission() now returns uint32 (thanks Scott Lawrence),
implement env using native Windows API (thanks Alex Brainman).
* reflect: allow PtrValue.PointTo(nil).
* runtime: correct line numbers for .goc files,
fix another stack split bug,
fix freebsd/386 mmap.
* syscall: regenerate syscall/z* files for linux/386, linux/amd64, linux/arm.
* tabwriter: Introduce a new flag StripEscape.
* template: fix handling of space around actions,
vars preceded by white space parse correctly (thanks Roger Peppe).
* test: add test case that crashes gccgo.
* time: parse no longer requires minutes for time zone (thanks Jan H. Hosang)
* yacc: fix bounds check in error recovery.
<h3 id="2010-08-11">2010-08-11</h3>
This release introduces some package changes. You may need to change your
code if you use the once, regexp, image, or exp/draw packages.
The type Once has been added to the sync package. The new sync.Once will
supersede the functionality provided by the once package. We intend to remove
the once package after this release. See:
All instances of once in the standard library have been replaced with
sync.Once. Reviewing these changes may help you modify your existing code.
The relevant changeset:
A new set of methods has been added to the regular expression package, regexp.
These provide a uniformly named approach to discovering the matches of an
expression within a piece of text; see the package documentation for details:
These new methods will, in a later release, replace the old methods for
matching substrings. The following methods are deprecated:
Execute (use FindSubmatchIndex)
ExecuteString (use FindStringSubmatchIndex)
MatchStrings(use FindStringSubmatch)
MatchSlices (use FindSubmatch)
AllMatches (use FindAll; note that n<0 means 'all matches'; was n<=0)
AllMatchesString (use FindAllString; note that n<0 means 'all matches'; was n<=0)
(Plus there are ten new methods you didn't know you wanted.)
Please update your code to use the new routines before the next release.
An image.Image now has a Bounds rectangle, where previously it ranged
from (0, 0) to (Width, Height). Loops that previously looked like:
for y := 0; y < img.Height(); y++ {
for x := 0; x < img.Width(); x++ {
// Do something with img.At(x, y)
should instead be:
b := img.Bounds()
for y := b.Min.Y; y < b.Max.Y; y++ {
for x := b.Min.X; x < b.Max.X; x++ {
// Do something with img.At(x, y)
The Point and Rectangle types have also moved from exp/draw to image.
Other changes:
* arm: bugfixes and syscall (thanks Kai Backman).
* asn1: fix incorrect encoding of signed integers (thanks Nicholas Waples).
* big: fixes to bitwise functions (thanks Evan Shaw).
* bytes: add IndexRune, FieldsFunc and To*Special (thanks Christian Himpel).
* encoding/binary: add complex (thanks Roger Peppe).
* exp/iterable: add UintArray (thanks Anschel Schaffer-Cohen).
* godoc: report Status 404 if a pkg or file is not found.
* gofmt: better reporting for unexpected semicolon errors.
* html: new package, an HTML tokenizer.
* image: change image representation from slice-of-slices to linear buffer,
introduce Decode and RegisterFormat,
introduce Transparent and Opaque,
replace Width and Height by Bounds, add the Point and Rect types.
* libbio: fix Bprint to address 6g issues with large data structures.
* math: fix amd64 Hypot (thanks Charles L. Dorian).
* net/textproto: new package, with example net/dict.
* os: fix ForkExec() handling of envv == nil (thanks Alex Brainman).
* png: grayscale support (thanks Mathieu Lonjaret).
* regexp: document that backslashes are the escape character.
* rpc: catch errors from ReadResponseBody.
* runtime: memory free fix (thanks Alex Brainman).
* template: add ParseFile method to template.Template.
* test/peano: use directly recursive type def.
<h3 id="2010-08-04">2010-08-04</h3>
This release includes a change to os.Open (and co.). The file permission
argument has been changed to a uint32. Your code may require changes - a simple
conversion operation at most.
Other changes:
* amd64: use segment memory for thread-local storage.
* arm: add gdb support to android launcher script,
bugfixes (stack clobbering, indices),
disable another flaky test,
remove old qemu dependency from gotest.
* bufio: introduce Peek.
* bytes: added test case for explode with blank string (thanks Scott Lawrence).
* cgo: correct multiple return value function invocations (thanks Christian Himpel).
* crypto/x509: unwrap Subject Key Identifier (thanks Adam Langley).
* gc: index bounds tests and other fixes.
* gofmt/go/parser: strengthen syntax checks.
* goinstall: check for error from exec.*Cmd.Wait() (thanks Alex Brainman).
* image/png: use image-specific methods for checking opacity.
* image: introduce Gray and Gray16 types,
remove the named colors except for Black and White.
* json: object members must have a value (thanks Anthony Martin).
* misc/vim: highlight misspelled words only in comments (thanks Christian Himpel).
* os: Null device (thanks Peter Mundy).
* runtime: do not fall through in SIGBUS/SIGSEGV.
* strings: fix Split("", "", -1) (thanks Scott Lawrence).
* syscall: make go errors not clash with windows errors (thanks Alex Brainman).
* test/run: diff old new,
* websocket: correct challenge response (thanks Tarmigan Casebolt),
fix bug involving spaces in header keys (thanks Bill Neubauer).
<h3 id="2010-07-29">2010-07-29</h3>
* 5g: more soft float support and several bugfixes.
* asn1: Enumerated, Flag and GeneralizedTime support.
* build: clean.bash to check that GOOS and GOARCH are set.
* bytes: add IndexFunc and LastIndexFunc (thanks Fazlul Shahriar),
add Title.
* cgo: If CC is set in environment, use it rather than "gcc",
use new command line syntax: -- separates cgo flags from gcc flags.
* codereview: avoid crash if no config,
don't run gofmt with an empty file list,
make 'hg submit' work with Mercurial 1.6.
* crypto/ocsp: add package to parse OCSP responses.
* crypto/tls: add client-side SNI support and PeerCertificates.
* exp/bignum: delete package - functionality subsumed by package big.
* fmt.Print: fix bug in placement of spaces introduced when ...T went in.
* fmt.Scanf: handle trailing spaces.
* gc: fix smaller-than-pointer-sized receivers in interfaces,
floating point precision/normalization fixes,
graceful exit on seg fault,
import dot shadowing bug,
many fixes including better handling of invalid input,
print error detail about failure to open import.
* gccgo_install.html: add description of the port to RTEMS (thanks Vinu Rajashekhar).
* gobs: fix bug in singleton arrays.
* godoc: display synopses for all packages that have some kind of documentation..
* gofmt: fix some linebreak issues.
* http: add https client support (thanks Fazlul Shahriar),
write body when content length unknown (thanks James Whitehead).
* io: MultiReader and MultiWriter (thanks Brad Fitzpatrick),
fix another race condition in Pipes.
* ld: many fixes including better handling of invalid input.
* libmach: correct handling of .5 files with D_REGREG addresses.
* linux/386: use Xen-friendly ELF TLS instruction sequence.
* mime: add AddExtensionType (thanks Yuusei Kuwana).
* misc/vim: syntax file recognizes constants like 1e9 (thanks Petar Maymounkov).
* net: TCPConn.SetNoDelay, back by popular demand.
* net(windows): fix crashing Read/Write when passed empty slice on (thanks Alex Brainman),
implement LookupHost/Port/SRV (thanks Wei Guangjing),
properly handle EOF in (*netFD).Read() (thanks Alex Brainman).
* runtime: fix bug introduced in revision 4a01b8d28570 (thanks Alex Brainman),
rename cgo2c, *.cgo to goc2c, *.goc (thanks Peter Mundy).
* scanner: better comment.
* strings: add Title.
* syscall: add ForkExec, Syscall12 on Windows (thanks Daniel Theophanes),
improve windows errno handling (thanks Alex Brainman).
* syscall(windows): fix FormatMessage (thanks Peter Mundy),
implement Pipe() (thanks Wei Guangjing).
* time: fix parsing of minutes in time zones.
* utf16(windows): fix cyclic dependency when testing (thanks Peter Mundy).
<h3 id="2010-07-14">2010-07-14</h3>
This release includes a package change. In container/vector, the Iter method
has been removed from the Vector, IntVector, and StringVector types. Also, the
Data method has been renamed to Copy to better express its actual behavior.
Now that Vector is just a slice, any for loops ranging over v.Iter() or
v.Data() can be changed to range over v instead.
Other changes:
* big: Improvements to Rat.SetString (thanks Evan Shaw),
add sign, abs, Rat.IsInt.
* cgo: various bug fixes.
* codereview: Fix for Mercurial >= 1.6 (thanks Evan Shaw).
* crypto/rand: add Windows implementation (thanks Peter Mundy).
* crypto/tls: make HTTPS servers easier,
add client OCSP stapling support.
* exp/eval: converted from bignum to big (thanks Evan Shaw).
* gc: implement new len spec, range bug fix, optimization.
* go/parser: require that '...' parameters are followed by a type.
* http: fix ParseURL to handle //relative_path properly.
* io: fix SectionReader Seek to seek backwards (thanks Peter Mundy).
* json: Add HTMLEscape (thanks Micah Stetson).
* ld: bug fixes.
* math: amd64 version of log (thanks Charles L. Dorian).
* mime/multipart: new package to parse multipart MIME messages
and HTTP multipart/form-data support.
* os: use TempFile with default TempDir for test files (thanks Peter Mundy).
* runtime/tiny: add docs for additional VMs, fix build (thanks Markus Duft).
* runtime: better error for send/recv on nil channel.
* spec: clarification of channel close(),
lock down some details about channels and select,
restrict when len(x) is constant,
specify len/cap for nil slices, maps, and channels.
* windows: append .exe to binary names (thanks Joe Poirier).
<h3 id="2010-07-01">2010-07-01</h3>
This release includes some package changes that may require changes to
client code.
The Split function in the bytes and strings packages has been changed.
The count argument, which limits the size of the return, previously treated
zero as unbounded. It now treats 0 as 0, and will return an empty slice.
To request unbounded results, use -1 (or some other negative value).
The new Replace functions in bytes and strings share this behavior.
This may require you change your existing code.
The gob package now allows the transmission of non-struct values at the
top-level. As a result, the rpc and netchan packages have fewer restrictions
on the types they can handle. For example, netchan can now share a chan int.
The release also includes a Code Walk: "Share Memory By Communicating".
It describes an idiomatic Go program that uses goroutines and channels:
There is now a Projects page on the Go Dashboard that lists Go programs,
tools, and libraries:
Other changes:
* 6a, 6l: bug fixes.
* bytes, strings: add Replace.
* cgo: use slash-free relative paths for .so references.
* cmath: correct IsNaN for argument cmplx(Inf, NaN) (thanks Charles L. Dorian).
* codereview: allow multiple email addresses in CONTRIBUTORS.
* doc/codewalk: add Share Memory By Communicating.
* exp/draw/x11: implement the mapping from keycodes to keysyms.
* fmt: Printf: fix bug in handling of %#v, allow other verbs for slices
Scan: fix handling of EOFs.
* gc: bug fixes and optimizations.
* gob: add DecodeValue and EncodeValue,
add support for complex numbers.
* goinstall: support for Bazaar+Launchpad (thanks Gustavo Niemeyer).
* io/ioutil: add TempFile for Windows (thanks Peter Mundy).
* ld: add -u flag to check safe bits; discard old -u, -x flags.
* math: amd64 versions of Exp and Fabs (thanks Charles L. Dorian).
* misc/vim: always override filetype detection for .go files.
* net: add support for DNS SRV requests (thanks Kirklin McDonald),
initial attempt to implement Windows version (thanks Alex Brainman).
* netchan: allow chan of basic types now that gob can handle such,
eliminate the need for a pointer value in Import and Export.
* os/signal: only catch all signals if os/signal package imported.
* regexp: bug fix: need to track whether match begins with fixed prefix.
* rpc: allow non-struct args and reply (they must still be pointers).
* runtime: bug fixes and reorganization.
* strconv: fix bugs in floating-point and base 2 conversions
* syscall: add syscall_bsd.go to zsycall_freebsd_386.go (thanks Peter Mundy),
add socketpair (thanks Ivan Krasin).
* time: implement time zones for Windows (thanks Alex Brainman).
* x509: support non-self-signed certs.
<h3 id="2010-06-21">2010-06-21</h3>
This release includes a language change. The "..." function parameter form is
gone; "...T" remains. Typically, "...interface{}" can be used instead of "...".
The implementation of Printf has changed in a way that subtly affects its
handling of the fmt.Stringer interface. You may need to make changes to your
code. For details, see:
The reflect package has been changed. If you have code that uses reflect,
it will need to be updated. For details, see:
Other changes:
* 8l: correct test for sp == top of stack in 8l -K code.
* asn1: allow '*' in PrintableString.
* bytes.Buffer.ReadFrom: fix bug.
* codereview: avoid exception in match (thanks Paolo Giarrusso).
* complex divide: match C99 implementation.
* exp/draw: small draw.drawGlyphOver optimization.
* fmt: Print*: reimplement to switch on type first,
Scanf: improve error message when input does not match format.
* gc: better error messages for interface failures, conversions, undefined symbols.
* go/scanner: report illegal escape sequences.
* gob: substitute slice for map.
* goinstall: process dependencies for package main (thanks Roger Peppe).
* gopack: add S flag to force marking a package as safe,
simplify go metadata code.
* html: sync testdata/webkit to match WebKit tip.
* http: reply to Expect 100-continue requests automatically (thanks Brad Fitzpatrick).
* image: add an Alpha16 type.
* ld: pad Go symbol table out to page boundary (fixes cgo crash).
* misc/vim: reorganize plugin to be easier to use (thanks James Whitehead).
* path: add Base, analogous to Unix basename.
* pkg/Makefile: allow DISABLE_NET_TESTS=1 to disable network tests.
* reflect: add Kind, Type.Bits, remove Int8Type, Int8Value, etc.
* runtime: additional Windows support (thanks Alex Brainman),
correct fault for 16-bit divide on Leopard,
fix 386 signal handler bug.
* strconv: add AtofN, FtoaN.
* string: add IndexFunc and LastIndexFunc (thanks Roger Peppe).
* syslog: use local network for tests.
<h3 id="2010-06-09">2010-06-09</h3>
This release contains many fixes and improvements, including several
clarifications and consolidations to the Language Specification.
The type checking rules around assignments and conversions are simpler but more
restrictive: assignments no longer convert implicitly from *[10]int to []int
(write x[0:] instead of &x), and conversions can no longer change the names of
types inside composite types.
The fmt package now includes flexible type-driven (fmt.Scan) and
format-driven (fmt.Scanf) scanners for all basic types.
* big: bug fix for Quo aliasing problem.
* bufio: change ReadSlice to match description.
* cgo: bug fixes.
* doc: add Google I/O talk and programs,
codereview + Mercurial Queues info (thanks Peter Williams).
* exp/draw: Draw fast paths for the Over operator,
add Rectangle.Eq and Point.In, fix Rectangle.Clip (thanks Roger Peppe).
* fmt: Scan fixes and improvements.
* gc: backslash newline is not a legal escape sequence in strings,
better error message when ~ operator is found,
fix export of complex types,
new typechecking rules.
* go/parser: correct position of empty statement ';'.
* gofmt: fix test script.
* goinstall: use 'git pull' instead of 'git checkout' (thanks Michael Hoisie).
* http: add Head function for making HTTP HEAD requests,
handle status 304 correctly.
* image: add Opaque method to the image types.
make Color.RGBA return 16 bit color instead of 32 bit color.
* io/ioutil: add TempFile.
* math: Pow special cases and additional tests (thanks Charles L. Dorian).
* netchan: improve closing and shutdown.
* os: implement os.FileInfo.*time_ns for windows (thanks Alex Brainman).
* os/signal: correct the regexp for finding Unix signal names (thanks Vinu Rajashekhar).
* regexp: optimizations (thanks Kyle Consalus).
* runtime: fix printing -Inf (thanks Evan Shaw),
finish pchw -> tiny, added gettime for tiny (thanks Daniel Theophanes).
* spec: clean-ups and consolidation.
* syscall: additional Windows compatibility fixes (thanks Alex Brainman).
* test/bench: added regex-dna-parallel.go (thanks Kyle Consalus).
* vector: type-specific Do functions now take f(type) (thanks Michael Hoisie).
<h3 id="2010-05-27">2010-05-27</h3>
A sizeable release, including standard library improvements and a slew of
compiler bug fixes. The three-week interval was largely caused by the team
preparing for Google I/O.
* big: add Rat type (thanks Evan Shaw),
new features, much performance tuning, cleanups, and more tests.
* bignum: deprecate by moving into exp directory.
* build: allow MAKEFLAGS to be set outside the build scripts (thanks Christopher Wedgwood).
* bytes: add Trim, TrimLeft, TrimRight, and generic functions (thanks Michael Hoisie).
* cgo: fix to permit cgo callbacks from init code.
* cmath: update range of Phase and Polar due to signed zero (thanks Charles L. Dorian).
* codereview: work better with mq (thanks Peter Williams).
* compress: renamings
NewDeflater -> NewWriter
NewInflater -> NewReader
Deflater -> Compressor
Inflater -> Decompressor
* exp/draw/x11: respect $XAUTHORITY,
treat $DISPLAY the same way x-go-bindings does.
* exp/draw: fast path for glyph images, other optimizations,
fix Rectangle.Canon (thanks Roger Peppe).
* fmt: Scan, Scanln: Start of a simple scanning API in the fmt package,
fix Printf crash when given an extra nil argument (thanks Roger Peppe).
* gc: better error when computing remainder of non-int (thanks Evan Shaw),
disallow middot in Go programs,
distinguish array, slice literal in error messages,
fix shift/reduce conflict in go.y export syntax,
fix unsafe.Sizeof on ideal constants,
handle use of builtin function outside function call,
many other bug fixes.
* gob: add support for maps,
add test for indirect maps, slices, arrays.
* godoc: collect package comments from all package files.
* gofmt: don't lose mandatory semicolons,
exclude test w/ illegal syntax from test cases,
fix printing of labels.
* http: prevent crash if remote server is not responding with "HTTP/".
* json: accept escaped slash in string scanner (thanks Michael Hoisie),
fix array -> non-array decoding.
* libmach: skip __nl_symbol_ptr section on OS X.
* math: amd64 versions of Fdim, Fmax, Fmin,
signed zero Sqrt special case (thanks Charles L. Dorian).
* misc/kate: convert isn't a built in function (thanks Evan Shaw).
* net: implement BindToDevice,
implement raw sockets (thanks Christopher Wedgwood).
* netFD: fix race between Close and Read/Write (thanks Michael Hoisie).
* os: add Chtimes function (thanks Brad Fitzpatrick).
* pkg/Makefile: add netchan to standard package list.
* runtime: GOMAXPROCS returns previous value,
allow large map values,
avoid allocation for fixed strings,
correct tracebacks for nascent goroutines, even closures,
free old hashmap pieces during resizing.
* spec: added imaginary literal to semicolon rules (was missing),
fix and clarify syntax of conversions,
simplify section on channel types,
other minor tweaks.
* strconv: Btoui64 optimizations (thanks Kyle Consalus).
* strings: use copy instead of for loop in Map (thanks Kyle Consalus).
* syscall: implement BindToDevice (thanks Christopher Wedgwood),
add Utimes on Darwin/FreeBSD, add Futimes everywhere,
regenerate syscalls for some platforms.
* template: regularize name lookups of interfaces, pointers, and methods.
<h3 id="2010-05-04">2010-05-04</h3>
In this release we renamed the Windows OS target from 'mingw' to 'windows'.
If you are currently building for 'mingw' you should set GOOS=windows instead.
* 5l, 6l, 8l, runtime: make -s binaries work.
* 5l, 6l, 8l: change ELF header so that strip doesn't destroy binary.
* 8l: fix absolute path detection on Windows.
* big: new functions, optimizations, and cleanups,
add bitwise methods for Int (thanks Evan Shaw).
* bytes: Change IndexAny to look for UTF-8 encoded characters.
* darwin: bsdthread_create can fail; print good error.
* fmt: %T missing print <nil> for nil (thanks Christopher Wedgwood).
* gc: many fixes.
* misc/cgo/gmp: fix bug in SetString.
* net: fix resolv.conf EOF without newline bug (thanks Christopher Wedgwood).
* spec: some small clarifications (no language changes).
* syscall: add EWOULDBLOCK to sycall_nacl.go,
force O_LARGEFILE in Linux open system call,
handle EOF on pipe - special case on Windows (thanks Alex Brainman),
mingw Sleep (thanks Joe Poirier).
* test/bench: import new fasta C reference, update Go, optimizations.
* test: test of static initialization (fails).
* vector: use correct capacity in call to make.
* xml: allow text segments to end at EOF.
<h3 id="2010-04-27">2010-04-27</h3>
This release includes a new Codelab that illustrates the construction of a
simple wiki web application:
It also includes a Codewalk framework for documenting code. See:
Other changes:
* 6g: fix need for parens around array index expression.
* 6l, 8l: include ELF header in PT_LOAD mapping for text segment.
* arm: add android runner script,
support for printing floats.
* big: implemented Karatsuba multiplication,
many fixes and improvements (thanks Evan Shaw).
* bytes: add Next method to Buffer, simplify Read,
shuffle implementation, making WriteByte 50% faster.
* crypto/tls: simpler implementation of record layer.
* exp/eval: fixes (thanks Evan Shaw).
* flag: eliminate unnecessary structs.
* gc: better windows support,
cmplx typecheck bug fix,
more specific error for statements at top level.
* go/parser: don't require unnecessary parens.
* godoc: exclude duplicate entries (thanks Andrei Vieru),
use int64 for timestamps (thanks Christopher Wedgwood).
* gofmt: fine-tune stripping of parentheses,
* json: Marshal, Unmarshal using new scanner,
preserve field name case by default,
scanner, Compact, Indent, and tests,
support for streaming.
* libmach: disassemble MOVLQZX correctly.
* math: more special cases for signed zero (thanks Charles L. Dorian).
* net: add Pipe,
fix bugs in packStructValue (thanks Michael Hoisie),
introduce net.Error interface.
* os: FileInfo: regularize the types of some fields,
create sys_bsd.go (thanks Giles Lean),
mingw bug fixes (thanks Alex Brainman).
* reflect: add FieldByNameFunc (thanks Raif S. Naffah),
implement Set(nil), SetValue(nil) for PtrValue and MapValue.
* regexp: allow escaping of any punctuation.
* rpc/jsonrpc: support for jsonrpc wire encoding.
* rpc: abstract client and server encodings,
add Close() method to rpc.Client.
* runtime: closures, defer bug fix for Native Client,
rename cgo2c, *.cgo to goc2c, *.goc to avoid confusion with real cgo.
several other fixes.
* scanner: implement Peek() to look at the next char w/o advancing.
* strings: add ReadRune to Reader, add FieldsFunc (thanks Kyle Consalus).
* syscall: match linux Setsid function signature to darwin,
mingw bug fixes (thanks Alex Brainman).
* template: fix handling of pointer inside interface.
* test/bench: add fannkuch-parallel.go (thanks Kyle Consalus),
pidigits ~10% performance win by using adds instead of shifts.
* time: remove incorrect time.ISO8601 and add time.RFC3339 (thanks Micah Stetson).
* utf16: add DecodeRune, EncodeRune.
* xml: add support for XML marshalling embedded structs (thanks Raif S. Naffah),
new "innerxml" tag to collect inner XML.
<h3 id="2010-04-13">2010-04-13</h3>
This release contains many changes:
* 8l: add DOS stub to PE binaries (thanks Evan Shaw).
* cgo: add //export.
* cmath: new complex math library (thanks Charles L. Dorian).
* docs: update to match current coding style (thanks Christopher Wedgwood).
* exp/eval: fix example and add target to Makefile (thanks Evan Shaw).
* fmt: change behaviour of format verb %b to match %x when negative (thanks Andrei Vieru).
* gc: compile s == "" as len(s) == 0,
distinguish fatal compiler bug from error+exit,
fix alignment on non-amd64,
good syntax error for defer func() {} - missing fina (),
implement panic and recover,
zero unnamed return values on entry if func has defer.
* goyacc: change to be reentrant (thanks Roger Peppe).
* io/ioutil: fix bug in ReadFile when Open succeeds but Stat fails.
* kate: update for recent language changes (thanks Evan Shaw).
* libcgo: initial mingw port work - builds but untested (thanks Joe Poirier).
* math: new functions and special cases (thanks Charles L. Dorian)
* net: use chan bool instead of chan *netFD to avoid cycle.
* netchan: allow client to send as well as receive.
* nntp: new package, NNTP client (thanks Conrad Meyer).
* os: rename os.Dir to os.FileInfo.
* rpc: don't log normal EOF,
fix ServeConn to block as documented.
* runtime: many bug fixes, better ARM support.
* strings: add IndexRune, Trim, TrimLeft, TrimRight, etc (thanks Michael Hoisie).
* syscall: implement some mingw syscalls required by os (thanks Alex Brainman).
* test/bench: add k-nucleotide-parallel (thanks Kyle Consalus).
* Unicode: add support for Turkish case mapping.
* xgb: move from the main repository to
<h3 id="2010-03-30">2010-03-30</h3>
This release contains three language changes:
1. Accessing a non-existent key in a map is no longer a run-time error.
It now evaluates to the zero value for that type. For example:
x := myMap[i] is now equivalent to: x, _ := myMap[i]
2. It is now legal to take the address of a function's return value.
The return values are copied back to the caller only after deferred
functions have run.
3. The functions panic and recover, intended for reporting and recovering from
failure, have been added to the spec:
In a related change, panicln is gone, and panic is now a single-argument
function. Panic and recover are recognized by the gc compilers but the new
behavior is not yet implemented.
The ARM build is broken in this release; ARM users should stay at release.2010-03-22.
Other changes:
* bytes, strings: add IndexAny.
* cc/ld: Add support for #pragma dynexport,
Rename dynld to dynimport throughout. Cgo users will need to rerun cgo.
* expvar: default publishings for cmdline, memstats
* flag: add user-defined flag types.
* gc: usual bug fixes
* go/ast: generalized ast filtering.
* go/printer: avoid reflect in print.
* godefs: fix handling of negative constants.
* godoc: export pprof debug information, exported variables,
support for filtering of command-line output in -src mode,
use http GET for remote search instead of rpc.
* gofmt: don't convert multi-line functions into one-liners,
preserve newlines in multiline selector expressions (thanks Risto Jaakko Saarelma).
* goinstall: include command name in error reporting (thanks Andrey Mirtchovski)
* http: add HandleFunc as shortcut to Handle(path, HandlerFunc(func))
* make: use actual dependency for install
* math: add J1, Y1, Jn, Yn, J0, Y0 (Bessel functions) (thanks Charles L. Dorian)
* prof: add pprof from google-perftools
* regexp: don't return non-nil *Regexp if there is an error.
* runtime: add Callers,
add malloc sampling, pprof interface,
add memory profiling, more statistics to runtime.MemStats,
implement missing destroylock() (thanks Alex Brainman),
more malloc statistics,
run all finalizers in a single goroutine,
Goexit runs deferred calls.
* strconv: add Atob and Btoa,
Unquote could wrongly return a nil error on error (thanks Roger Peppe).
* syscall: add IPV6 constants,
add syscall_bsd.go for Darwin and other *BSDs (thanks Giles Lean),
implement SetsockoptString (thanks Christopher Wedgwood).
* websocket: implement new protocol (thanks Fumitoshi Ukai).
* xgb: fix request length and request size (thanks Firmansyah Adiputra).
* xml: add CopyToken (thanks Kyle Consalus),
add line numbers to syntax errors (thanks Kyle Consalus),
use io.ReadByter in place of local readByter (thanks Raif S. Naffah).
<h3 id="2010-03-22">2010-03-22</h3>
With this release we announce the launch of the Go Blog:
The first post is a brief update covering what has happened since the launch.
This release contains some new packages and functionality, and many fixes:
* 6g/8g: fix issues with complex data types, other bug fixes.
* Makefiles: refactored to make writing external Makefiles easier.
* crypto/rand: new package.
* godoc: implemented command-line search via RPC,
improved comment formatting: recognize URLs.
* gofmt: more consistent formatting of const/var decls.
* http: add Error helper function,
add ParseQuery (thanks Petar Maymounkov),
change RawPath to mean raw path, not raw everything-after-scheme.
* image/jpeg: fix typos.
* json: add MarshalIndent (accepts user-specified indent string).
* math: add Gamma function (thanks Charles L. Dorian).
* misc/bbedit: support for cmplx, real, imag (thanks Anthony Starks).
* misc/vim: add new complex types, functions and literals.
* net: fix IPMask.String not to crash on all-0xff mask.
* os: drop File finalizer after normal Close.
* runtime: add GOROOT and Version,
lock finalizer table accesses.
* sha512: add sha384 (truncated version) (thanks Conrad Meyer).
* syscall: add const ARCH, analogous to OS.
* syscall: further additions to mingw port (thanks Alex Brainman).
* template: fixed html formatter []byte input bug.
* utf16: new package.
* version.bash: cope with ancient Mercurial.
* websocket: use URL.RawPath to construct WebSocket-Location: header.
<h3 id="2010-03-15">2010-03-15</h3>
This release includes a language change: support for complex numbers.
There is no library support as yet.
This release also includes the goinstall command-line tool.
* 5g/6g/8g: fix double function call in slice.
* arm: cleanup build warnings. (thanks Dean Prichard)
* big: fix mistakes with probablyPrime.
* bufio: add WriteRune.
* bytes: add ReadRune and WriteRune to bytes.Buffer.
* cc: stack split bug fix.
* crypto: add SHA-224 to sha256, add sha512 package. (thanks Conrad Meyer)
* crypto/ripemd160: new package. (thanks Raif S. Naffah)
* crypto/rsa: don't use safe primes.
* gc: avoid fixed length buffer cleanbuf. (thanks Dean Prichard)
better compilation of floating point +=
fix crash on complicated arg to make slice.
remove duplicate errors, give better error for I.(T)
* godoc: support for multiple packages in a directory, other fixes.
* gofmt: bug fixes.
* hash: add Sum64 interface.
* hash/crc32: add Update function.
* hash/crc64: new package implementing 64-bit CRC.
* math: add ilogb, logb, remainder. (thanks Charles L. Dorian)
* regexp: add ReplaceAllFunc, ReplaceAllStringFunc.
* runtime: clock garbage collection on bytes allocated, not pages in use.
* strings: make Split(s, "", n) faster. (thanks Spring Mc)
* syscall: minimal mingw version of syscall. (thanks Alex Brainman)
* template: add ParseFile, MustParseFile.
<h3 id="2010-03-04">2010-03-04</h3>
There is one language change: the ability to convert a string to []byte or
[]int. This deprecates the strings.Bytes and strings.Runes functions.
You can convert your existing sources using these gofmt commands:
gofmt -r 'strings.Bytes(x) -> []byte(x)' -w file-or-directory-list
gofmt -r 'strings.Runes(x) -> []int(x)' -w file-or-directory-list
After running these you might need to delete unused imports of the "strings"
Other changes and fixes:
* 6l/8l/5l: add -r option
* 8g: make a[byte(x)] truncate x
* fix for compatibility with hg >=1.4.3
* crypto/blowfish: new package (thanks Raif S. Naffah)
* dashboard: more performance tuning
* fmt: use String method in %q to get the value to quote.
* gofmt: several cosmetic changes
* http: fix handling of Connection: close, bug in http.Post
* net: correct DNS configuration,
fix network timeout boundary condition,
put [ ] around IPv6 addresses for Dial.
* path: add Match,
fix bug in Match with non-greedy stars (thanks Kevin Ballard)
* strings: delete Bytes, Runes (see above)
* tests: an Eratosthenesque concurrent prime sieve (thanks Anh Hai Trinh)
<h3 id="2010-02-23">2010-02-23</h3>
This release is mainly bug fixes and a little new code.
There are no language changes.
6g/5g/8g: bug fixes
8a/8l: Added FCMOVcc instructions (thanks Evan Shaw and Charles Dorian)
crypto/x509: support certificate creation
dashboard: caching to avoid datastore queries
exec: add dir argument to Run
godoc: bug fixes and code cleanups
http: continued implementation and bug fixes (thanks Petar Maymounkov)
json: fix quoted strings in Marshal (thanks Sergei Skorobogatov)
math: more functions, test cases, and benchmarks (thanks Charles L. Dorian)
misc/bbedit: treat predeclared identifiers as "keywords" (thanks Anthony Starks)
net: disable UDP server test (flaky on various architectures)
runtime: work around Linux kernel bug in futex,
pchw is now tiny
sync: fix to work on armv5 (thanks Dean Prichard)
websocket: fix binary frame size decoding (thanks Timo Savola)
xml: allow unquoted attribute values in non-Strict mode (thanks Amrut Joshi)
treat bool as value in Unmarshal (thanks Michael Hoisie)
<h3 id="2010-02-17">2010-02-17</h3>
There are two small language changes:
* NUL bytes may be rejected in souce files, and the tools do reject them.
* Conversions from string to []int and []byte are defined but not yet implemented.
Other changes and fixes:
* 5a/6a/8a/5c/6c/8c: remove fixed-size arrays for -I and -D options (thanks Dean Prichard)
* 5c/6c/8c/5l/6l/8l: add -V flag to display version number
* 5c/6c/8c: use "cpp" not "/bin/cpp" for external preprocessor (thanks Giles Lean)
* 8a/8l: Added CMOVcc instructions (thanks Evan Shaw)
* 8l: pe executable building code changed to include import table for kernel32.dll functions (thanks Alex Brainman)
* 5g/6g/8g: bug fixes
* asn1: bug fixes and additions (incl marshalling)
* build: fix build for Native Client, Linux/ARM
* dashboard: show benchmarks, add garbage collector benchmarks
* encoding/pem: add marshalling support
* exp/draw: fast paths for a nil mask
* godoc: support for directories outside $GOROOT
* http: sort header keys when writing Response or Request to wire (thanks Petar Maymounkov)
* math: special cases and new functions (thanks Charles Dorian)
* mime: new package, used in http (thanks Michael Hoisie)
* net: dns bug fix - use random request id
* os: finalize File, to close fd.
* path: make Join variadic (thanks Stephen Weinberg)
* regexp: optimization bug fix
* runtime: misc fixes and optimizations
* syscall: make signature of Umask on OS X, FreeBSD match Linux. (thanks Giles Lean)
<h3 id="2010-02-04">2010-02-04</h3>
There is one language change: support for ...T parameters:
You can now check build status on various platforms at the Go Dashboard:
* 5l/6l/8l: several minor fixes
* 5a/6a/8a/5l/6l/8l: avoid overflow of symb buffer (thanks Dean Prichard)
* compress/gzip: gzip deflater (i.e., writer)
* debug/proc: add mingw specific build stubs (thanks Joe Poirier)
* exp/draw: separate the source-point and mask-point in Draw
* fmt: handle nils safely in Printf
* gccgo: error messages now match those of gc
* godoc: several fixes
* http: bug fixes, revision of Request/Response (thanks Petar Maymounkov)
* image: new image.A type to represent anti-aliased font glyphs
add named colors (e.g. image.Blue), suitable for exp/draw
* io: fixed bugs in Pipe
* malloc: merge into package runtime
* math: fix tests on FreeBSD (thanks Devon H. O'Dell)
add functions; update tests and special cases (thanks Charles L. Dorian)
* os/signal: send SIGCHLDs to Incoming (thanks Chris Wedgwood)
* reflect: add StringHeader to reflect
* runtime: add SetFinalizer
* time: Sleep through interruptions (thanks Chris Wedgwood)
add RFC822 formats
experimental implemenation of Ticker using two goroutines for all tickers
* xml: allow underscores in XML element names (thanks Michael Hoisie)
allow any scalar type in xml.Unmarshal
<h3 id="2010-01-27">2010-01-27</h3>
There are two small language changes: the meaning of chan <- chan int
is now defined, and functions returning functions do not need to
parenthesize the result type.
There is one significant implementation change: the compilers can
handle multiple packages using the same name in a single binary.
In the gc compilers, this comes at the cost of ensuring that you
always import a particular package using a consistent import path.
In the gccgo compiler, the cost is that you must use the -fgo-prefix
flag to pass a unique prefix (like the eventual import path).
5a/6a/8a: avoid use of fixed-size buffers (thanks Dean Prichard)
5g, 6g, 8g: many minor bug fixes
bufio: give Writer.WriteString same signature as bytes.Buffer.WriteString.
container/list: PushFrontList, PushBackList (thanks Jan Hosang)
godoc: trim spaces from search query (thanks Christopher Wedgwood)
hash: document that Sum does not change state, fix crypto hashes
http: bug fixes, revision of Request/Response (thanks Petar Maymounkov)
math: more handling of IEEE 754 special cases (thanks Charles Dorian)
misc/dashboard: new build dashboard
net: allow UDP broadcast,
use /etc/hosts to resolve names (thanks Yves Junqueira, Michael Hoisie)
netchan: beginnings of new package for connecting channels across a network
os: allow FQDN in Hostname test (thanks Icarus Sparry)
reflect: garbage collection bug in Call
runtime: demo of Go on raw (emulated) hw in runtime/pchw,
performance fix on OS X
spec: clarify meaning of chan <- chan int,
func() func() int is allowed now,
define ... T (not yet implemented)
template: can use interface values
time: fix for +0000 time zone,
more robust tick.Stop.
xgb: support for authenticated connections (thanks Firmansyah Adiputra)
xml: add Escape (thanks Stephen Weinberg)
<h3 id="2010-01-13">2010-01-13</h3>
This release is mainly bug fixes with a little new code.
There are no language changes.
build: $GOBIN should no longer be required in $PATH (thanks Devon H. O'Dell),
new package target "make bench" to run benchmarks
8g: faster float -> uint64 conversion (thanks Evan Shaw)
5g, 6g, 8g:
clean opnames.h to avoid stale errors (thanks Yongjian Xu),
a handful of small compiler fixes
5g, 6g, 8g, 5l, 6l, 8l: ignore $GOARCH, which is implied by name of tool
6prof: support for writing input files for google-perftools's pprof
asn1: fix a few structure-handling bugs
cgo: many bug fixes (thanks Devon H. O'Dell)
codereview: repeated "hg mail" sends "please take another look"
gob: reserve ids for future expansion
godoc: distinguish HTML generation from plain text HTML escaping (thanks Roger Peppe)
gofmt: minor bug fixes, removed -oldprinter flag
http: add CanonicalPath (thanks Ivan Krasin),
avoid header duplication in Response.Write,
correctly escape/unescape URL sections
io: new interface ReadByter
json: better error, pointer handling in Marshal (thanks Ivan Krasin)
libmach: disassembly of FUCOMI, etc (thanks Evan Shaw)
math: special cases for most functions and 386 hardware Sqrt (thanks Charles Dorian)
misc/dashboard: beginning of a build dashboard at
misc/emacs: handling of new semicolon rules (thanks Austin Clements),
empty buffer bug fix (thanks Kevin Ballard)
misc/kate: highlighting improvements (tahnks Evan Shaw)
os/signal: add signal names: signal.SIGHUP, etc (thanks David Symonds)
runtime: preliminary Windows support (thanks Hector Chu),
preemption polling to reduce garbage collector pauses
scanner: new lightweight scanner package
template: bug fix involving spaces before a delimited block
test/bench: updated timings
time: new Format, Parse functions
<h3 id="2010-01-05">2010-01-05</h3>
This release is mainly bug fixes. There are no language changes.
6prof: now works on 386
8a, 8l: add FCOMI, FCOMIP, FUCOMI, and FUCOMIP (thanks Evan Shaw)
big: fix ProbablyPrime on small numbers
container/vector: faster []-based implementation (thanks Jan Mercl)
crypto/tls: extensions and Next Protocol Negotiation
gob: one encoding bug fix, one decoding bug fix
image/jpeg: support for RST markers
image/png: support for transparent paletted images
misc/xcode: improved support (thanks Ken Friedenbach)
net: return nil Conn on error from Dial (thanks Roger Peppe)
regexp: add Regexp.NumSubexp (thanks Peter Froehlich)
syscall: add Nanosleep on FreeBSD (thanks Devon H. O'Dell)
template: can use map in .repeated section
There is now a public road map, in the repository and online
at <a href=""></a>.
<h3 id="2009-12-22">2009-12-22</h3>
Since the last release there has been one large syntactic change to
the language, already discussed extensively on this list: semicolons
are now implied between statement-ending tokens and newline characters.
See for
By default, gofmt now parses and prints the new lighter weight syntax.
To convert programs written in the old syntax, you can use:
gofmt -oldparser -w *.go
Since everything was being reformatted anyway, we took the opportunity to
change the way gofmt does alignment. Now gofmt uses tabs at the start
of a line for basic code alignment, but it uses spaces for alignment of
interior columns. Thus, in an editor with a fixed-width font, you can
choose your own tab size to change the indentation, and no matter what
tab size you choose, columns will be aligned properly.
In addition to the syntax and formatting changes, there have been many
smaller fixes and updates:
6g,8g,5g: many bug fixes, better registerization,
build process fix involving mkbuiltin (thanks Yongjian Xu),
method expressions for concrete types
8l: support for Windows PE files (thanks Hector Chu)
bytes: more efficient Buffer handling
bytes, strings: new function Fields (thanks Andrey Mirtchovski)
cgo: handling of enums (thanks Moriyoshi Koizumi),
handling of structs with bit fields, multiple files (thanks Devon H. O'Dell),
installation of .so to non-standard locations
crypto/sha256: new package for SHA 256 (thanks Andy Davis)
encoding/binary: support for slices of fixed-size values (thanks Maxim Ushakov)
exp/vector: experimental alternate vector representation (thanks Jan Mercl)
fmt: %p for chan, map, slice types
gob: a couple more bug fixes
http: support for basic authentication (thanks Ivan Krasin)
image/jpeg: basic JPEG decoder
math: correct handling of Inf and NaN in Pow (thanks Charles Dorian)
misc/bash: completion file for bash (thanks Alex Ray)
os/signal: support for handling Unix signals (thanks David Symonds)
rand: Zipf-distributed random values (thanks William Josephson)
syscall: correct error return bug on 32-bit machines (thanks Christopher Wedgwood)
syslog: new package for writing to Unix syslog daemon (thanks Yves Junqueira)
template: will automatically invoke niladic methods
time: new ISO8601 format generator (thanks Ben Olive)
xgb: converted generator to new syntax (thanks Tor Andersson)
xml: better mapping of tag names to Go identifiers (thanks Kei Son),
better handling of unexpected EOF (thanks Arvindh Rajesh Tamilmani)
<h3 id="2009-12-09">2009-12-09</h3>
Since the last release there are two changes to the language:
* new builtin copy(dst, src) copies n = min(len(dst), len(src))
elements to dst from src and returns n. It works correctly
even if dst and src overlap. bytes.Copy is gone.
Convert your programs using:
gofmt -w -r 'bytes.Copy(d, s) -&gt; copy(d, s)' *.go
* new syntax x[lo:] is shorthand for x[lo:len(x)].
Convert your programs using:
gofmt -w -r 'a[b:len(a)] -&gt; a[b:]' *.go
In addition, there have been many smaller fixes and updates:
* 6g/8g/5g: many bug fixes
* 8g: fix 386 floating point stack bug (thanks Charles Dorian)
* all.bash: now works even when $GOROOT has spaces (thanks Sergio Luis O. B. Correia),
starting to make build work with mingw (thanks Hector Chu),
FreeBSD support (thanks Devon O'Dell)
* big: much faster on 386.
* bytes: new function IndexByte, implemented in assembly
new function Runes (thanks Peter Froehlich),
performance tuning in bytes.Buffer.
* codereview: various bugs fixed
* container/vector: New is gone; just declare a Vector instead.
call Resize to set len and cap.
* cgo: many bug fixes (thanks Eden Li)
* crypto: added MD4 (thanks Chris Lennert),
added XTEA (thanks Adrian O'Grady).
* crypto/tls: basic client
* exp/iterable: new functions (thanks Michael Elkins)
* exp/nacl: native client tree builds again
* fmt: preliminary performance tuning
* go/ast: more powerful Visitor (thanks Roger Peppe)
* gob: a few bug fixes
* gofmt: better handling of standard input, error reporting (thanks Fazlul Shahriar)
new -r flag for rewriting programs
* gotest: support for Benchmark functions (thanks Trevor Strohman)
* io: ReadFile, WriteFile, ReadDir now in separate package io/ioutil.
* json: new Marshal function (thanks Michael Hoisie),
better white space handling (thanks Andrew Skiba),
decoding into native data structures (thanks Sergey Gromov),
handling of nil interface values (thanks Ross Light).
* math: correct handling of sin/cos of large angles
* net: better handling of Close (thanks Devon O'Dell and Christopher Wedgwood)
support for UDP broadcast (thanks Jonathan Wills),
support for empty packets
* rand: top-level functions now safe to call from multiple goroutines
(thanks Roger Peppe).
* regexp: a few easy optimizations
* rpc: better error handling, a few bug fixes
* runtime: better signal handling on OS X, malloc fixes,
global channel lock is gone.
* sync: RWMutex now allows concurrent readers (thanks Péter Szabó)
* template: can use maps as data (thanks James Meneghello)
* unicode: updated to Unicode 5.2.
* websocket: new package (thanks Fumitoshi Ukai)
* xgb: preliminary X Go Bindings (thanks Tor Andersson)
* xml: fixed crash (thanks Vish Subramanian)
* misc: bbedit config (thanks Anthony Starks),
kate config (thanks Evan Shaw)