簡體   English   中英

反射結構的類型錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM