在下面的代码中,为了显示预期的类型,我必须创建一个新对象并对其调用 reflect.TypeOf
。
package main
import (
"fmt"
"reflect"
)
type X struct {
name string
}
func check(something interface{}) {
if _, ok := something.(*X); !ok {
fmt.Printf("Expecting type %v, got %v\n",
reflect.TypeOf(X{}), reflect.TypeOf(something))
}
}
func main()
check(struct{}{})
}
也许对象创建不是开销,但我仍然很想知道更好的方法。 Java 中是否有类似 X.getName()
或 X.getSimpleName()
的东西?
最佳答案
获取reflect.Type
一个类型的描述符,你可以使用
reflect.TypeOf((*X)(nil)).Elem()
避免创建 X
类型的值。有关详细信息,请参阅这些问题:
How to get the string representation of a type?
Golang TypeOf without an instance and passing result to a func
要打印某些值的类型,您可以使用 fmt.Printf("%T, something)
。
而实际上对于你想做的事情,你可以完全抛开反射(reflection),简单地做:
fmt.Printf("Expecting type %T, got %T\n", (*X)(nil), something)
输出将是(在 Go Playground 上尝试):
Expecting type *main.X, got struct {}
关于pointers - 不使用 reflrect 打印类型并创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53005545/