2021-10-18 17:26:18 +00:00
|
|
|
// 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)
|
|
|
|
}
|
2021-10-18 17:59:29 +00:00
|
|
|
|
2021-10-18 17:26:18 +00:00
|
|
|
func conv2[T any](v interface{}) (T, bool) {
|
|
|
|
x, ok := v.(T)
|
|
|
|
return x, ok
|
|
|
|
}
|
2021-10-18 17:59:29 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|