pointers - 在不使用 reflrect 的情况下打印类型并创建新对象
问题描述
在下面的代码中,为了显示预期的类型,我必须创建一个新对象并调用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{}{})
}
也许创建对象不是开销,但我仍然很想知道更好的方法。有类似X.getName()
或X.getSimpleName()
在java中的东西吗?
解决方案
要获取reflect.Type
类型的描述符,您可以使用
reflect.TypeOf((*X)(nil)).Elem()
以避免必须创建 type 的值X
。有关更多详细信息,请参阅这些问题:
Golang TypeOf 没有实例并将结果传递给 func
要打印某些值的类型,您可以使用fmt.Printf("%T, something)
.
实际上,对于您想做的事情,您可以完全将反思放在一边,只需执行以下操作:
fmt.Printf("Expecting type %T, got %T\n", (*X)(nil), something)
输出将是(在Go Playground上尝试):
Expecting type *main.X, got struct {}
推荐阅读
- prolog - 在 Prolog 中生成可能的组合
- javascript - 即使 If 语句条件有效,Else 语句也会执行
- machine-learning - Chainer 如何保存和加载 DQN 模型
- python - AttributeError:“str”对象没有属性“mean_validation_score”
- python - 获取长文本列
- braintree - 订阅 - 正负余额?
- python - tensorflow.python.framework.errors_impl.OutOfRangeError: RandomShuffleQueue
- reactjs - 在反应中获取和更新表单数据
- javascript - 在 Three.js 中为搅拌机中的装配模型制作动画
- java - 将数据导入数据库时,在自动生成的 id 上获取 Javax Hibernate ConstraintViolationException