У меня есть 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?
Код, приведенный здесь, не может производить вывод, который вы говорите. – Wessie
Пожалуйста, прочитайте о создании [mcve] (http://stackoverflow.com/help/mcve) (минимальный, полный и проверяемый пример). Недопустимые фрагменты кода. Когда они редактируются, чтобы скомпилировать их (в основном отсутствующие скобки), операторы «Println» дают мне «* pkg1.User» с Go1.4.2. (Примечание: 'fmt.Printf ("% T% # v \ n ", u, u)' действительно дает '* reflect.rtype & reflect.rtype {...', но это не то, что вы утверждаете, что использовали). –
И либо ожидайте, либо обратитесь к 'reflect.Type' или не передадите его (т. Е. Просто выполните' pkg2.Register ((* User) (nil)) ', если вы не хотите/не ожидаете' отражения .Type'). –