错误的反射结构类型

时间:2015-06-11 20:43:16

标签: 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?

1 个答案:

答案 0 :(得分:-2)

reflect.TypeOf()返回reflect.Type现在您正在做两件完全不同的事情:在第一次调用Println(“正确的”)时,reflect.Type被包含在interface{}内{1}}(在调用Println期间),而在第二个(“错误的”)中,在调用RegisterSturct时将reflect.Type包裹在interface{}内,然后再将其重新包装一次调用Println时interface{}。 Println只删除了一层接口{} - 包装。

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