reflection - 错误的反射结构类型

标签 reflection go

我有 2 个不同的包(pkg1、pkg2),首先我有从另一个包调用函数的代码

文件#1

package pkg1
import "pkg2"
import "reflect"

type User struct {
  name string
  ...
}

func main() {
  fmt.Println(reflect.TypeOf((*User)(nil)) //=> *User
  pkg2.RegisterStruct(reflect.TypeOf((*User)(nil))
  //pkg2.RegisterStruct(reflect.TypeOf(&User{}) // also tried this way
}

文件#2

package pkg2

import "reflect"

func RegisterStruct(u interface{}) { // also tried to have argument type as reflect.Type
 fmt.Println(u) //=> *reflect.rtype
}

为什么类型是 reflect.rtype 而不是 *User ? 我如何正确地将类型传递给另一个 pkg?

最佳答案

reflect.TypeOf() 返回一个 reflect.Type 现在你正在做两件完全不同的事情:在第一次调用 Println(“正确”的) 此 reflect.Type 包装在 interface{} 中(在调用 Println 期间),而在第二个(“错误”的)中包装 reflect.Type 在调用 RegisterSturct 时在 interface{} 中,然后在调用 Println 时再次将其重新包装在另一个 interface{} 中。 Println 只是移除了一层界面{}包装。

对不起,这是胡说八道。我得再考虑一下。如果可能会删除。

关于reflection - 错误的反射结构类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30791082/

相关文章:

ios - GLSL 中的反射贴图

java - 如何使用反射以外的方式填充 JavaBean

go - 尝试了 monad 模式,但仍然有重复的错误处理

go - pongo2 RegisterFilter 如何返回映射或数组?

java - 如何找到方法参数的具体类

c# - 在运行时创建通用数组

multithreading - go map 结构是线程安全的吗?

Golang 反向代理返回 Not found 或 Forbidden 错误

amazon-web-services - go-sdk上s3前缀可以去掉吗?

c# - 在不知道属性类型的情况下从属性和列表值中获取属性值