"Fossies" - the Fresh Open Source Software Archive

Member "go/doc/go1.3.html" (9 Sep 2020, 23103 Bytes) of package /windows/misc/go1.14.9.windows-386.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) HTML source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 <!--{
    2     "Title": "Go 1.3 Release Notes",
    3     "Path":  "/doc/go1.3",
    4     "Template": true
    5 }-->
    6 
    7 <h2 id="introduction">Introduction to Go 1.3</h2>
    8 
    9 <p>
   10 The latest Go release, version 1.3, arrives six months after 1.2,
   11 and contains no language changes.
   12 It focuses primarily on implementation work, providing 
   13 precise garbage collection,
   14 a major refactoring of the compiler toolchain that results in
   15 faster builds, especially for large projects,
   16 significant performance improvements across the board,
   17 and support for DragonFly BSD, Solaris, Plan 9 and Google's Native Client architecture (NaCl).
   18 It also has an important refinement to the memory model regarding synchronization.
   19 As always, Go 1.3 keeps the <a href="/doc/go1compat.html">promise
   20 of compatibility</a>,
   21 and almost everything 
   22 will continue to compile and run without change when moved to 1.3.
   23 </p>
   24 
   25 <h2 id="os">Changes to the supported operating systems and architectures</h2>
   26 
   27 <h3 id="win2000">Removal of support for Windows 2000</h3>
   28 
   29 <p>
   30 Microsoft stopped supporting Windows 2000 in 2010.
   31 Since it has <a href="https://codereview.appspot.com/74790043">implementation difficulties</a>
   32 regarding exception handling (signals in Unix terminology),
   33 as of Go 1.3 it is not supported by Go either.
   34 </p>
   35 
   36 <h3 id="dragonfly">Support for DragonFly BSD</h3>
   37 
   38 <p>
   39 Go 1.3 now includes experimental support for DragonFly BSD on the <code>amd64</code> (64-bit x86) and <code>386</code> (32-bit x86) architectures.
   40 It uses DragonFly BSD 3.6 or above.
   41 </p>
   42 
   43 <h3 id="freebsd">Support for FreeBSD</h3>
   44 
   45 <p>
   46 It was not announced at the time, but since the release of Go 1.2, support for Go on FreeBSD
   47 requires FreeBSD 8 or above.
   48 </p>
   49 
   50 <p>
   51 As of Go 1.3, support for Go on FreeBSD requires that the kernel be compiled with the
   52 <code>COMPAT_FREEBSD32</code> flag configured.
   53 </p>
   54 
   55 <p>
   56 In concert with the switch to EABI syscalls for ARM platforms, Go 1.3 will run only on FreeBSD 10.
   57 The x86 platforms, 386 and amd64, are unaffected.
   58 </p>
   59 
   60 <h3 id="nacl">Support for Native Client</h3>
   61 
   62 <p>
   63 Support for the Native Client virtual machine architecture has returned to Go with the 1.3 release.
   64 It runs on the 32-bit Intel architectures (<code>GOARCH=386</code>) and also on 64-bit Intel, but using
   65 32-bit pointers (<code>GOARCH=amd64p32</code>).
   66 There is not yet support for Native Client on ARM.
   67 Note that this is Native Client (NaCl), not Portable Native Client (PNaCl).
   68 Details about Native Client are <a href="https://developers.google.com/native-client/dev/">here</a>;
   69 how to set up the Go version is described <a href="//golang.org/wiki/NativeClient">here</a>.
   70 </p>
   71 
   72 <h3 id="netbsd">Support for NetBSD</h3>
   73 
   74 <p>
   75 As of Go 1.3, support for Go on NetBSD requires NetBSD 6.0 or above.
   76 </p>
   77 
   78 <h3 id="openbsd">Support for OpenBSD</h3>
   79 
   80 <p>
   81 As of Go 1.3, support for Go on OpenBSD requires OpenBSD 5.5 or above.
   82 </p>
   83 
   84 <h3 id="plan9">Support for Plan 9</h3>
   85 
   86 <p>
   87 Go 1.3 now includes experimental support for Plan 9 on the <code>386</code> (32-bit x86) architecture.
   88 It requires the <code>Tsemacquire</code> syscall, which has been in Plan 9 since June, 2012.
   89 </p>
   90 
   91 <h3 id="solaris">Support for Solaris</h3>
   92 
   93 <p>
   94 Go 1.3 now includes experimental support for Solaris on the <code>amd64</code> (64-bit x86) architecture.
   95 It requires illumos, Solaris 11 or above.
   96 </p>
   97 
   98 <h2 id="memory">Changes to the memory model</h2>
   99 
  100 <p>
  101 The Go 1.3 memory model <a href="https://codereview.appspot.com/75130045">adds a new rule</a>
  102 concerning sending and receiving on buffered channels,
  103 to make explicit that a buffered channel can be used as a simple
  104 semaphore, using a send into the
  105 channel to acquire and a receive from the channel to release.
  106 This is not a language change, just a clarification about an expected property of communication.
  107 </p>
  108 
  109 <h2 id="impl">Changes to the implementations and tools</h2>
  110 
  111 <h3 id="stacks">Stack</h3>
  112 
  113 <p>
  114 Go 1.3 has changed the implementation of goroutine stacks away from the old,
  115 "segmented" model to a contiguous model.
  116 When a goroutine needs more stack
  117 than is available, its stack is transferred to a larger single block of memory.
  118 The overhead of this transfer operation amortizes well and eliminates the old "hot spot"
  119 problem when a calculation repeatedly steps across a segment boundary.
  120 Details including performance numbers are in this
  121 <a href="//golang.org/s/contigstacks">design document</a>.
  122 </p>
  123 
  124 <h3 id="garbage_collector">Changes to the garbage collector</h3>
  125 
  126 <p>
  127 For a while now, the garbage collector has been <em>precise</em> when examining
  128 values in the heap; the Go 1.3 release adds equivalent precision to values on the stack.
  129 This means that a non-pointer Go value such as an integer will never be mistaken for a
  130 pointer and prevent unused memory from being reclaimed.
  131 </p>
  132 
  133 <p>
  134 Starting with Go 1.3, the runtime assumes that values with pointer type
  135 contain pointers and other values do not.
  136 This assumption is fundamental to the precise behavior of both stack expansion
  137 and garbage collection.
  138 Programs that use <a href="/pkg/unsafe/">package unsafe</a>
  139 to store integers in pointer-typed values are illegal and will crash if the runtime detects the behavior.
  140 Programs that use <a href="/pkg/unsafe/">package unsafe</a> to store pointers
  141 in integer-typed values are also illegal but more difficult to diagnose during execution.
  142 Because the pointers are hidden from the runtime, a stack expansion or garbage collection
  143 may reclaim the memory they point at, creating
  144 <a href="//en.wikipedia.org/wiki/Dangling_pointer">dangling pointers</a>.
  145 </p>
  146 
  147 <p>
  148 <em>Updating</em>: Code that uses <code>unsafe.Pointer</code> to convert
  149 an integer-typed value held in memory into a pointer is illegal and must be rewritten.
  150 Such code can be identified by <code>go vet</code>.
  151 </p>
  152 
  153 <h3 id="map">Map iteration</h3>
  154 
  155 <p>
  156 Iterations over small maps no longer happen in a consistent order.
  157 Go 1 defines that &ldquo;<a href="//golang.org/ref/spec#For_statements">The iteration order over maps
  158 is not specified and is not guaranteed to be the same from one iteration to the next.</a>&rdquo;
  159 To keep code from depending on map iteration order,
  160 Go 1.0 started each map iteration at a random index in the map.
  161 A new map implementation introduced in Go 1.1 neglected to randomize
  162 iteration for maps with eight or fewer entries, although the iteration order
  163 can still vary from system to system.
  164 This has allowed people to write Go 1.1 and Go 1.2 programs that
  165 depend on small map iteration order and therefore only work reliably on certain systems.
  166 Go 1.3 reintroduces random iteration for small maps in order to flush out these bugs.
  167 </p>
  168 
  169 <p>
  170 <em>Updating</em>: If code assumes a fixed iteration order for small maps,
  171 it will break and must be rewritten not to make that assumption.
  172 Because only small maps are affected, the problem arises most often in tests.
  173 </p>
  174 
  175 <h3 id="liblink">The linker</h3>
  176 
  177 <p>
  178 As part of the general <a href="//golang.org/s/go13linker">overhaul</a> to
  179 the Go linker, the compilers and linkers have been refactored.
  180 The linker is still a C program, but now the instruction selection phase that
  181 was part of the linker has been moved to the compiler through the creation of a new
  182 library called <code>liblink</code>.
  183 By doing instruction selection only once, when the package is first compiled,
  184 this can speed up compilation of large projects significantly.
  185 </p>
  186 
  187 <p>
  188 <em>Updating</em>: Although this is a major internal change, it should have no
  189 effect on programs.
  190 </p>
  191 
  192 <h3 id="gccgo">Status of gccgo</h3>
  193 
  194 <p>
  195 GCC release 4.9 will contain the Go 1.2 (not 1.3) version of gccgo.
  196 The release schedules for the GCC and Go projects do not coincide,
  197 which means that 1.3 will be available in the development branch but
  198 that the next GCC release, 4.10, will likely have the Go 1.4 version of gccgo.
  199 </p>
  200 
  201 <h3 id="gocmd">Changes to the go command</h3>
  202 
  203 <p>
  204 The <a href="/cmd/go/"><code>cmd/go</code></a> command has several new
  205 features.
  206 The <a href="/cmd/go/"><code>go run</code></a> and
  207 <a href="/cmd/go/"><code>go test</code></a> subcommands
  208 support a new <code>-exec</code> option to specify an alternate
  209 way to run the resulting binary.
  210 Its immediate purpose is to support NaCl.
  211 </p>
  212 
  213 <p>
  214 The test coverage support of the <a href="/cmd/go/"><code>go test</code></a>
  215 subcommand now automatically sets the coverage mode to <code>-atomic</code>
  216 when the race detector is enabled, to eliminate false reports about unsafe
  217 access to coverage counters.
  218 </p>
  219 
  220 <p>
  221 The <a href="/cmd/go/"><code>go test</code></a> subcommand
  222 now always builds the package, even if it has no test files.
  223 Previously, it would do nothing if no test files were present.
  224 </p>
  225 
  226 <p>
  227 The <a href="/cmd/go/"><code>go build</code></a> subcommand
  228 supports a new <code>-i</code> option to install dependencies
  229 of the specified target, but not the target itself.
  230 </p>
  231 
  232 <p>
  233 Cross compiling with <a href="/cmd/cgo/"><code>cgo</code></a> enabled
  234 is now supported.
  235 The CC_FOR_TARGET and CXX_FOR_TARGET environment
  236 variables are used when running all.bash to specify the cross compilers
  237 for C and C++ code, respectively.
  238 </p>
  239 
  240 <p>
  241 Finally, the go command now supports packages that import Objective-C
  242 files (suffixed <code>.m</code>) through cgo.
  243 </p>
  244 
  245 <h3 id="cgo">Changes to cgo</h3>
  246 
  247 <p>
  248 The <a href="/cmd/cgo/"><code>cmd/cgo</code></a> command,
  249 which processes <code>import "C"</code> declarations in Go packages,
  250 has corrected a serious bug that may cause some packages to stop compiling.
  251 Previously, all pointers to incomplete struct types translated to the Go type <code>*[0]byte</code>,
  252 with the effect that the Go compiler could not diagnose passing one kind of struct pointer
  253 to a function expecting another.
  254 Go 1.3 corrects this mistake by translating each different
  255 incomplete struct to a different named type.
  256 </p>
  257 
  258 <p>
  259 Given the C declaration <code>typedef struct S T</code> for an incomplete <code>struct S</code>,
  260 some Go code used this bug to refer to the types <code>C.struct_S</code> and <code>C.T</code> interchangeably.
  261 Cgo now explicitly allows this use, even for completed struct types.
  262 However, some Go code also used this bug to pass (for example) a <code>*C.FILE</code>
  263 from one package to another.
  264 This is not legal and no longer works: in general Go packages
  265 should avoid exposing C types and names in their APIs.
  266 </p>
  267 
  268 <p>
  269 <em>Updating</em>: Code confusing pointers to incomplete types or
  270 passing them across package boundaries will no longer compile
  271 and must be rewritten.
  272 If the conversion is correct and must be preserved,
  273 use an explicit conversion via <a href="/pkg/unsafe/#Pointer"><code>unsafe.Pointer</code></a>.
  274 </p>
  275 
  276 <h3 id="swig">SWIG 3.0 required for programs that use SWIG</h3>
  277 
  278 <p>
  279 For Go programs that use SWIG, SWIG version 3.0 is now required.
  280 The <a href="/cmd/go"><code>cmd/go</code></a> command will now link the
  281 SWIG generated object files directly into the binary, rather than
  282 building and linking with a shared library.
  283 </p>
  284 
  285 <h3 id="gc_flag">Command-line flag parsing</h3>
  286 
  287 <p>
  288 In the gc toolchain, the assemblers now use the
  289 same command-line flag parsing rules as the Go flag package, a departure
  290 from the traditional Unix flag parsing.
  291 This may affect scripts that invoke the tool directly.
  292 For example,
  293 <code>go tool 6a -SDfoo</code> must now be written
  294 <code>go tool 6a -S -D foo</code>.
  295 (The same change was made to the compilers and linkers in <a href="/doc/go1.1#gc_flag">Go 1.1</a>.)
  296 </p>
  297 
  298 <h3 id="godoc">Changes to godoc</h3>
  299 <p>
  300 When invoked with the <code>-analysis</code> flag, 
  301 <a href="//godoc.org/golang.org/x/tools/cmd/godoc">godoc</a>
  302 now performs sophisticated <a href="/lib/godoc/analysis/help.html">static
  303 analysis</a> of the code it indexes.  
  304 The results of analysis are presented in both the source view and the
  305 package documentation view, and include the call graph of each package
  306 and the relationships between 
  307 definitions and references,
  308 types and their methods,
  309 interfaces and their implementations,
  310 send and receive operations on channels,
  311 functions and their callers, and
  312 call sites and their callees.
  313 </p>
  314 
  315 <h3 id="misc">Miscellany</h3>
  316 
  317 <p>
  318 The program <code>misc/benchcmp</code> that compares
  319 performance across benchmarking runs has been rewritten.
  320 Once a shell and awk script in the main repository, it is now a Go program in the <code>go.tools</code> repo.
  321 Documentation is <a href="//godoc.org/golang.org/x/tools/cmd/benchcmp">here</a>.
  322 </p>
  323 
  324 <p>
  325 For the few of us that build Go distributions, the tool <code>misc/dist</code> has been
  326 moved and renamed; it now lives in <code>misc/makerelease</code>, still in the main repository.
  327 </p>
  328 
  329 <h2 id="performance">Performance</h2>
  330 
  331 <p>
  332 The performance of Go binaries for this release has improved in many cases due to changes
  333 in the runtime and garbage collection, plus some changes to libraries.
  334 Significant instances include:
  335 </p>
  336 
  337 <ul> 
  338 
  339 <li>
  340 The runtime handles defers more efficiently, reducing the memory footprint by about two kilobytes
  341 per goroutine that calls defer.
  342 </li>
  343 
  344 <li>
  345 The garbage collector has been sped up, using a concurrent sweep algorithm,
  346 better parallelization, and larger pages.
  347 The cumulative effect can be a 50-70% reduction in collector pause time.
  348 </li>
  349 
  350 <li>
  351 The race detector (see <a href="/doc/articles/race_detector.html">this guide</a>)
  352 is now about 40% faster.
  353 </li>
  354 
  355 <li>
  356 The regular expression package <a href="/pkg/regexp/"><code>regexp</code></a>
  357 is now significantly faster for certain simple expressions due to the implementation of
  358 a second, one-pass execution engine.
  359 The choice of which engine to use is automatic;
  360 the details are hidden from the user.
  361 </li>
  362 
  363 </ul>
  364 
  365 <p>
  366 Also, the runtime now includes in stack dumps how long a goroutine has been blocked,
  367 which can be useful information when debugging deadlocks or performance issues.
  368 </p>
  369 
  370 <h2 id="library">Changes to the standard library</h2>
  371 
  372 <h3 id="new_packages">New packages</h3>
  373 
  374 <p>
  375 A new package <a href="/pkg/debug/plan9obj/"><code>debug/plan9obj</code></a> was added to the standard library.
  376 It implements access to Plan 9 <a href="https://9p.io/magic/man2html/6/a.out">a.out</a> object files.
  377 </p>
  378 
  379 <h3 id="major_library_changes">Major changes to the library</h3>
  380 
  381 <p>
  382 A previous bug in <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a>
  383 made it possible to skip verification in TLS inadvertently.
  384 In Go 1.3, the bug is fixed: one must specify either ServerName or
  385 InsecureSkipVerify, and if ServerName is specified it is enforced.
  386 This may break existing code that incorrectly depended on insecure
  387 behavior.
  388 </p>
  389 
  390 <p>
  391 There is an important new type added to the standard library: <a href="/pkg/sync/#Pool"><code>sync.Pool</code></a>.
  392 It provides an efficient mechanism for implementing certain types of caches whose memory
  393 can be reclaimed automatically by the system.
  394 </p>
  395 
  396 <p>
  397 The <a href="/pkg/testing/"><code>testing</code></a> package's benchmarking helper,
  398 <a href="/pkg/testing/#B"><code>B</code></a>, now has a
  399 <a href="/pkg/testing/#B.RunParallel"><code>RunParallel</code></a> method
  400 to make it easier to run benchmarks that exercise multiple CPUs.
  401 </p>
  402 
  403 <p>
  404 <em>Updating</em>: The crypto/tls fix may break existing code, but such
  405 code was erroneous and should be updated.
  406 </p>
  407 
  408 <h3 id="minor_library_changes">Minor changes to the library</h3>
  409 
  410 <p>
  411 The following list summarizes a number of minor changes to the library, mostly additions.
  412 See the relevant package documentation for more information about each change.
  413 </p>
  414 
  415 <ul>
  416 
  417 <li> In the <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> package,
  418 a new <a href="/pkg/crypto/tls/#DialWithDialer"><code>DialWithDialer</code></a>
  419 function lets one establish a TLS connection using an existing dialer, making it easier
  420 to control dial options such as timeouts.
  421 The package also now reports the TLS version used by the connection in the
  422 <a href="/pkg/crypto/tls/#ConnectionState"><code>ConnectionState</code></a>
  423 struct.
  424 </li>
  425 
  426 <li> The <a href="/pkg/crypto/x509/#CreateCertificate"><code>CreateCertificate</code></a>
  427 function of the <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> package
  428 now supports parsing (and elsewhere, serialization) of PKCS #10 certificate
  429 signature requests.
  430 </li>
  431 
  432 <li>
  433 The formatted print functions of the <code>fmt</code> package now define <code>%F</code>
  434 as a synonym for <code>%f</code> when printing floating-point values.
  435 </li>
  436 
  437 <li>
  438 The <a href="/pkg/math/big/"><code>math/big</code></a> package's
  439 <a href="/pkg/math/big/#Int"><code>Int</code></a> and
  440 <a href="/pkg/math/big/#Rat"><code>Rat</code></a> types
  441 now implement
  442 <a href="/pkg/encoding/#TextMarshaler"><code>encoding.TextMarshaler</code></a> and
  443 <a href="/pkg/encoding/#TextUnmarshaler"><code>encoding.TextUnmarshaler</code></a>.
  444 </li>
  445 
  446 <li>
  447 The complex power function, <a href="/pkg/math/cmplx/#Pow"><code>Pow</code></a>,
  448 now specifies the behavior when the first argument is zero.
  449 It was undefined before.
  450 The details are in the <a href="/pkg/math/cmplx/#Pow">documentation for the function</a>.
  451 </li>
  452 
  453 <li>
  454 The <a href="/pkg/net/http/"><code>net/http</code></a> package now exposes the
  455 properties of a TLS connection used to make a client request in the new
  456 <a href="/pkg/net/http/#Response"><code>Response.TLS</code></a> field.
  457 </li>
  458 
  459 <li>
  460 The <a href="/pkg/net/http/"><code>net/http</code></a> package now
  461 allows setting an optional server error logger
  462 with <a href="/pkg/net/http/#Server"><code>Server.ErrorLog</code></a>.
  463 The default is still that all errors go to stderr.
  464 </li>
  465 
  466 <li>
  467 The <a href="/pkg/net/http/"><code>net/http</code></a> package now
  468 supports disabling HTTP keep-alive connections on the server
  469 with <a href="/pkg/net/http/#Server.SetKeepAlivesEnabled"><code>Server.SetKeepAlivesEnabled</code></a>.
  470 The default continues to be that the server does keep-alive (reuses
  471 connections for multiple requests) by default.
  472 Only resource-constrained servers or those in the process of graceful
  473 shutdown will want to disable them.
  474 </li>
  475 
  476 <li>
  477 The <a href="/pkg/net/http/"><code>net/http</code></a> package adds an optional
  478 <a href="/pkg/net/http/#Transport"><code>Transport.TLSHandshakeTimeout</code></a>
  479 setting to cap the amount of time HTTP client requests will wait for
  480 TLS handshakes to complete.
  481 It's now also set by default
  482 on <a href="/pkg/net/http#DefaultTransport"><code>DefaultTransport</code></a>.
  483 </li>
  484 
  485 <li>
  486 The <a href="/pkg/net/http/"><code>net/http</code></a> package's
  487 <a href="/pkg/net/http/#DefaultTransport"><code>DefaultTransport</code></a>,
  488 used by the HTTP client code, now
  489 enables <a href="http://en.wikipedia.org/wiki/Keepalive#TCP_keepalive">TCP
  490 keep-alives</a> by default.
  491 Other <a href="/pkg/net/http/#Transport"><code>Transport</code></a>
  492 values with a nil <code>Dial</code> field continue to function the same
  493 as before: no TCP keep-alives are used.
  494 </li>
  495 
  496 <li>
  497 The <a href="/pkg/net/http/"><code>net/http</code></a> package
  498 now enables <a href="http://en.wikipedia.org/wiki/Keepalive#TCP_keepalive">TCP
  499 keep-alives</a> for incoming server requests when
  500 <a href="/pkg/net/http/#ListenAndServe"><code>ListenAndServe</code></a>
  501 or
  502 <a href="/pkg/net/http/#ListenAndServeTLS"><code>ListenAndServeTLS</code></a>
  503 are used.
  504 When a server is started otherwise, TCP keep-alives are not enabled.
  505 </li>
  506 
  507 <li>
  508 The <a href="/pkg/net/http/"><code>net/http</code></a> package now
  509 provides an
  510 optional <a href="/pkg/net/http/#Server"><code>Server.ConnState</code></a>
  511 callback to hook various phases of a server connection's lifecycle
  512 (see <a href="/pkg/net/http/#ConnState"><code>ConnState</code></a>).
  513 This can be used to implement rate limiting or graceful shutdown.
  514 </li>
  515 
  516 <li>
  517 The <a href="/pkg/net/http/"><code>net/http</code></a> package's HTTP
  518 client now has an
  519 optional <a href="/pkg/net/http/#Client"><code>Client.Timeout</code></a>
  520 field to specify an end-to-end timeout on requests made using the
  521 client.
  522 </li>
  523 
  524 <li>
  525 The <a href="/pkg/net/http/"><code>net/http</code></a> package's
  526 <a href="/pkg/net/http/#Request.ParseMultipartForm"><code>Request.ParseMultipartForm</code></a>
  527 method will now return an error if the body's <code>Content-Type</code>
  528 is not <code>multipart/form-data</code>.
  529 Prior to Go 1.3 it would silently fail and return <code>nil</code>.
  530 Code that relies on the previous behavior should be updated.
  531 </li>
  532 
  533 <li> In the <a href="/pkg/net/"><code>net</code></a> package,
  534 the <a href="/pkg/net/#Dialer"><code>Dialer</code></a> struct now
  535 has a <code>KeepAlive</code> option to specify a keep-alive period for the connection.
  536 </li>
  537 
  538 <li>
  539 The <a href="/pkg/net/http/"><code>net/http</code></a> package's 
  540 <a href="/pkg/net/http/#Transport"><code>Transport</code></a>
  541 now closes <a href="/pkg/net/http/#Request"><code>Request.Body</code></a>
  542 consistently, even on error.
  543 </li>
  544 
  545 <li>
  546 The <a href="/pkg/os/exec/"><code>os/exec</code></a> package now implements
  547 what the documentation has always said with regard to relative paths for the binary.
  548 In particular, it only calls <a href="/pkg/os/exec/#LookPath"><code>LookPath</code></a>
  549 when the binary's file name contains no path separators.
  550 </li>
  551 
  552 <li>
  553 The <a href="/pkg/reflect/#Value.SetMapIndex"><code>SetMapIndex</code></a>
  554 function in the <a href="/pkg/reflect/"><code>reflect</code></a> package
  555 no longer panics when deleting from a <code>nil</code> map.
  556 </li>
  557 
  558 <li>
  559 If the main goroutine calls 
  560 <a href="/pkg/runtime/#Goexit"><code>runtime.Goexit</code></a>
  561 and all other goroutines finish execution, the program now always crashes,
  562 reporting a detected deadlock.
  563 Earlier versions of Go handled this situation inconsistently: most instances
  564 were reported as deadlocks, but some trivial cases exited cleanly instead.
  565 </li>
  566 
  567 <li>
  568 The runtime/debug package now has a new function
  569 <a href="/pkg/runtime/debug/#WriteHeapDump"><code>debug.WriteHeapDump</code></a>
  570 that writes out a description of the heap.
  571 </li>
  572 
  573 <li>
  574 The <a href="/pkg/strconv/#CanBackquote"><code>CanBackquote</code></a>
  575 function in the <a href="/pkg/strconv/"><code>strconv</code></a> package
  576 now considers the <code>DEL</code> character, <code>U+007F</code>, to be
  577 non-printing.
  578 </li>
  579 
  580 <li>
  581 The <a href="/pkg/syscall/"><code>syscall</code></a> package now provides
  582 <a href="/pkg/syscall/#SendmsgN"><code>SendmsgN</code></a>
  583 as an alternate version of
  584 <a href="/pkg/syscall/#Sendmsg"><code>Sendmsg</code></a>
  585 that returns the number of bytes written.
  586 </li>
  587 
  588 <li>
  589 On Windows, the <a href="/pkg/syscall/"><code>syscall</code></a> package now
  590 supports the cdecl calling convention through the addition of a new function
  591 <a href="/pkg/syscall/#NewCallbackCDecl"><code>NewCallbackCDecl</code></a>
  592 alongside the existing function
  593 <a href="/pkg/syscall/#NewCallback"><code>NewCallback</code></a>.
  594 </li>
  595 
  596 <li>
  597 The <a href="/pkg/testing/"><code>testing</code></a> package now
  598 diagnoses tests that call <code>panic(nil)</code>, which are almost always erroneous.
  599 Also, tests now write profiles (if invoked with profiling flags) even on failure.
  600 </li>
  601 
  602 <li>
  603 The <a href="/pkg/unicode/"><code>unicode</code></a> package and associated
  604 support throughout the system has been upgraded from
  605 Unicode 6.2.0 to <a href="http://www.unicode.org/versions/Unicode6.3.0/">Unicode 6.3.0</a>.
  606 </li>
  607 
  608 </ul>