mirror of https://github.com/golang/go.git
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:
parent
20c300bc70
commit
9867262dfd
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in New Issue