mirror of
https://github.com/golang/go
synced 2024-11-17 04:55:07 -07:00
c700c23cef
The upcoming built-in zero value provides an idiomatic way to test for zero by comparing to the zero literal: v == zero. The reflect package is meant to provide a programmatic way to perform operations that the Go language itself provides. Thus, it seems prudent that reflect.ValueOf(&v).Elem().IsZero() is identical to v == zero. This change alters the behavior of Value.IsZero in two concrete ways: * negative zero is identical to zero * blank fields in a struct are ignored Prior to this change, we were already in an inconsistent state due to a regression introduced by CL 411478. The new behavior was already the case for comparable composite types. This change makes it consistent for all other types (in particular incomparable composite types and standalone numbers). Updates #61372 Fixes #61827 Change-Id: Id23fb97eb3b8921417cc75a1d3ead963e22dc3d9 Reviewed-on: https://go-review.googlesource.com/c/go/+/517777 Reviewed-by: Russ Cox <rsc@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
123 lines
3.1 KiB
HTML
123 lines
3.1 KiB
HTML
<!--{
|
|
"Title": "Go 1.22 Release Notes",
|
|
"Path": "/doc/go1.22"
|
|
}-->
|
|
|
|
<!--
|
|
NOTE: In this document and others in this directory, the convention is to
|
|
set fixed-width phrases with non-fixed-width spaces, as in
|
|
<code>hello</code> <code>world</code>.
|
|
Do not send CLs removing the interior tags from such phrases.
|
|
-->
|
|
|
|
<style>
|
|
main ul li { margin: 0.5em 0; }
|
|
</style>
|
|
|
|
<h2 id="introduction">DRAFT RELEASE NOTES — Introduction to Go 1.22</h2>
|
|
|
|
<p>
|
|
<strong>
|
|
Go 1.22 is not yet released. These are work-in-progress
|
|
release notes. Go 1.22 is expected to be released in February 2024.
|
|
</strong>
|
|
</p>
|
|
|
|
<h2 id="language">Changes to the language</h2>
|
|
|
|
<p>
|
|
TODO: complete this section
|
|
</p>
|
|
|
|
<h2 id="tools">Tools</h2>
|
|
|
|
<h3 id="go-command">Go command</h3>
|
|
|
|
<p>
|
|
TODO: complete this section, or delete if not needed
|
|
</p>
|
|
|
|
<h3 id="cgo">Cgo</h3>
|
|
|
|
<p><!-- CL 497837 --> The special comment that precedes
|
|
<code>import</code> <code>"C"</code> may now include two
|
|
new <code>#cgo</code> directives.
|
|
<ul>
|
|
<li>
|
|
<code>#cgo</code> <code>noescape</code> <code>cFunctionName</code>
|
|
tells cgo that Go pointers passed to the C function
|
|
<code>cFunctionName</code> do not escape.
|
|
</li>
|
|
<li>
|
|
<code>#cgo</code> <code>nocallback</code> <code>cFunctionName</code>
|
|
tells cgo that the C function <code>cFunctionName</code> does
|
|
not call any Go functions.
|
|
</li>
|
|
</ul>
|
|
See <a href="/cmd/cgo#hdr-Optimizing_calls_of_C_code">the <code>cgo</code>
|
|
documentation</a> for more details.
|
|
</p>
|
|
|
|
<h2 id="runtime">Runtime</h2>
|
|
|
|
<p>
|
|
TODO: complete this section, or delete if not needed
|
|
</p>
|
|
|
|
<h2 id="compiler">Compiler</h2>
|
|
|
|
<p>
|
|
TODO: complete this section, or delete if not needed
|
|
</p>
|
|
|
|
<h2 id="linker">Linker</h2>
|
|
|
|
<p>
|
|
TODO: complete this section, or delete if not needed
|
|
</p>
|
|
|
|
<h2 id="library">Core library</h2>
|
|
|
|
<h3 id="minor_library_changes">Minor changes to the library</h3>
|
|
|
|
<p>
|
|
As always, there are various minor changes and updates to the library,
|
|
made with the Go 1 <a href="/doc/go1compat">promise of compatibility</a>
|
|
in mind.
|
|
There are also various performance improvements, not enumerated here.
|
|
</p>
|
|
|
|
<p>
|
|
TODO: complete this section
|
|
</p>
|
|
|
|
<dl id="database/sql"><dt><a href="/pkg/database/sql/">database/sql</a></dt>
|
|
<dd>
|
|
<p><!-- https://go.dev/issue/60370, CL 501700 -->
|
|
The new <a href="/pkg/database/sql/#Null"><code>Null[T]</code></a> type
|
|
provide a way to scan nullable columns for any column types.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
|
|
<dd>
|
|
<p><!-- https://go.dev/issue/61827, CL 517777 -->
|
|
The <a href="/pkg/reflect/#Value.IsZero"><code>Value.IsZero</code></a>
|
|
method will now return true for a floating-point or complex
|
|
negative zero, and will return true for a struct value if a
|
|
blank field (a field named <code>_</code>) somehow has a
|
|
non-zero value.
|
|
These changes make <code>IsZero</code> consistent with comparing
|
|
a value to zero using the languague <code>==</code> operator.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<h2 id="ports">Ports</h2>
|
|
|
|
<p>
|
|
TODO: complete this section, or delete if not needed
|
|
</p>
|
|
|