pointers - 不使用 reflrect 打印类型并创建新对象

标签 pointers go struct reflection types

在下面的代码中,为了显示预期的类型,我必须创建一个新对象并对其调用 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/

相关文章:

c++ - 指针错误

Python numpy 数组元素不改变值

c++ - 2个c源文件之间的函数指针操作导致编译时错误

linux - 如何设置不可变文件属性

image - Go - 将 base64 字符串保存到文件

c++ - C++中结构数组的初始化

python - 弃用警告 : struct integer overflow masking is deprecated

C 数据结构错误

encryption - Golang 在不同的机器上生成相同的加密

json - 何时在 JSON 中使用列表