приведение отраженного значения к типу в Голанге? - PullRequest
0 голосов
/ 18 мая 2018

Можно ли динамически приводить значение, сгенерированное функциейlect.Zero/New, обратно к произвольному типу?Насколько я понимаю, это в значительной степени ограничивает использование отражения, поскольку вам всегда нужно знать тип, с которым вы работаете.

Вот пример того, что я имею в виду:

package main

import (
    "fmt"
    "reflect"
)

type A struct {
    Name string
}

func main() {

    a := &A{Name: "Dave"}
    fmt.Println(a)

    //create a nil pointer of an arbitrary type
    dynamicType := reflect.TypeOf(a)
    dynamicNil := reflect.Zero(dynamicType).Interface()
    a = dynamicNil //is it possible to do this without explicitly casting to A (ie. avoiding `a = dynamicNil.(*A)`)
    fmt.Println(a)
}

1 Ответ

0 голосов
/ 18 мая 2018

Проза и код вашего вопроса противоречат.

В вашем коде dynamicNil имеет тип interface{}, а не reflect.Value, как предполагает проза.Поскольку a имеет конкретный тип *A, вам придется печатать dynamicNil до *A.Обойти это невозможно.

Также обратите внимание, что в Go нет приведений - только преобразования типов и утверждения.

Редактировать: возможно, вы ищете reflect.Value.Set?мне неясно.

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