spec: document behavior of generic type switch cases

Fixes #51110.

Change-Id: I11370417f1ef435b05dfab18eeabc2c3c1b7b8a1
Reviewed-on: https://go-review.googlesource.com/c/go/+/384674
Trust: Robert Griesemer <gri@golang.org>
Trust: Dan Scales <danscales@google.com>
Reviewed-by: Dan Scales <danscales@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Robert Griesemer 2022-02-09 12:43:21 -08:00
parent 20c300bc70
commit 9867262dfd
1 changed files with 26 additions and 0 deletions

View File

@ -6253,6 +6253,32 @@ if v == nil {
}
</pre>
<p>
A <a href="#Type_parameters">type parameter</a> or a <a href="#Type_declarations">parameterized type</a>
may be used as a type in a case. If upon <a href="#Instantiations">instantiation</a> that type turns
out to duplicate another entry in the switch, the first matching case is chosen.
</p>
<pre>
func f[P any](x any) int {
switch x.(type) {
case P:
return 0
case string:
return 1
case []P:
return 2
case []byte:
return 3
default:
return 4
}
}
var v1 = f[string]("foo") // v1 == 0
var v2 = f[byte]([]byte{}) // v2 == 2
</pre>
<p>
The type switch guard may be preceded by a simple statement, which
executes before the guard is evaluated.