[英]Wrong type of reflected struct
我有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),而在第二個(“錯誤的”一個)中,您在調用RegisterSturct時將reflect.Type
包裝在一個interface{}
,然后在調用Println時再次將其reflect.Type
包裝在另一個interface{}
。 Println只是刪除了一層界面{}包裝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.