<!--{
"Title": "The Go Programming Language Specification",
- "Subtitle": "Version of September 1, 2016",
+ "Subtitle": "Version of October 4, 2016",
"Path": "/ref/spec"
}-->
to <code>T</code>.
</li>
<li>
- <code>x</code>'s type and <code>T</code> have identical
+ ignoring struct tags (see below),
+ <code>x</code>'s type and <code>T</code> have <a href="#Type_identity">identical</a>
<a href="#Types">underlying types</a>.
</li>
<li>
+ ignoring struct tags (see below),
<code>x</code>'s type and <code>T</code> are unnamed pointer types
and their pointer base types have identical underlying types.
</li>
</li>
</ul>
+<p>
+<a href="#Struct_types">Struct tags</a> are ignored when comparing struct types
+for identity for the purpose of conversion:
+</p>
+
+<pre>
+type Person struct {
+ Name string
+ Address *struct {
+ Street string
+ City string
+ }
+}
+
+var data *struct {
+ Name string `json:"name"`
+ Address *struct {
+ Street string `json:"street"`
+ City string `json:"city"`
+ } `json:"address"`
+}
+
+var person = (*Person)(data) // ignoring tags, the underlying types are identical
+</pre>
+
<p>
Specific rules apply to (non-constant) conversions between numeric types or
to and from a string type.