diff --git a/doc/go_spec.html b/doc/go_spec.html index 4d8312a917..c0ed27730f 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -6253,6 +6253,32 @@ if v == nil { } +
+A type parameter or a parameterized type +may be used as a type in a case. If upon instantiation that type turns +out to duplicate another entry in the switch, the first matching case is chosen. +
+ +
+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
+
+
The type switch guard may be preceded by a simple statement, which executes before the guard is evaluated.