Удаление указателя из отражения. Тип - PullRequest
0 голосов
/ 26 июня 2018

У меня есть reflect.Type, который содержит двойной указатель на структуру. Я хотел бы иметь возможность удалить один уровень косвенности, чтобы иметь указатель на структуру. Это возможно? Например, я хотел бы сделать это:

func foo(x interface{}) {
    typ := reflect.TypeOf(x)
    fmt.Printf("%v", typ) // prints **Foo
    realType := typ.PointsTo()
    fmt.Printf("%v", typ) // prints *Foo
}

Но, насколько я понимаю, эта функциональность не существует. Существует функция Indirect, которая работает на Value с, но я не вижу ничего похожего, что работает на Type с.

1 Ответ

0 голосов
/ 26 июня 2018

Я полагаю, вы ищете Type.Elem():

Элемент возвращает тип элемента типа.

В случае указателя «тип элемента» - это тип, на который указывает указатель.

func foo(x interface{}) {
    typ := reflect.TypeOf(x)
    fmt.Printf("%v", typ) // prints **Foo
    realType := typ.Elem()
    fmt.Printf("%v", realType) // prints *Foo
}

Детская площадка: https://play.golang.org/p/7Vx58ASPZQz

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...