mirror of
https://github.com/golang/go
synced 2024-09-15 22:20:06 +00:00
2be5b84665
Change-Id: I2fca7a801c85ed93c002c23bfcb0cf9593f1bdf4 Reviewed-on: https://go-review.googlesource.com/c/go/+/356571 Trust: Keith Randall <khr@golang.org> Trust: Dan Scales <danscales@google.com> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Dan Scales <danscales@google.com>
56 lines
871 B
Go
56 lines
871 B
Go
// 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
|
|
}
|
|
}
|