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