// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package a func Conv(v interface{}) string { return conv[string](v) } func conv[T any](v interface{}) T { return v.(T) } func Conv2(v interface{}) (string, bool) { return conv2[string](v) } func conv2[T any](v interface{}) (T, bool) { x, ok := v.(T) return x, ok } func Conv3(v interface{}) string { return conv3[string](v) } func conv3[T any](v interface{}) T { switch v := v.(type) { case T: return v default: var z T return z } } type Mystring string func (Mystring) Foo() { } func Conv4(v interface{Foo()}) Mystring { return conv4[Mystring](v) } func conv4[T interface{Foo()}](v interface{Foo()}) T { switch v := v.(type) { case T: return v default: var z T return z } }