Как я могу установить значение пользовательского типа, используя отражение? - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть тип

type SpecialString *string

У меня есть два значения отражения: aVal и bVal (просто для ясности aVal и bVal имеют тип reflect.Value), где

aVal.Type() // *SpecialString
bVal.Type() // *string

В обычном коде я могу создать c, указатель на специальную строку, например, так:

a := "foo"
b := SpecialString(&a)
c := &b   

Как я могу добиться того же, используя отражение?

aval.Set(bVal) // does not work: "reflect.Set: value of type *string is not assignable to type *SpecialString"

1 Ответ

0 голосов
/ 02 ноября 2018

Вам необходимо преобразовать типы и обратить внимание на то, что вы можете и не можете установить. Что-то вроде:

type SpecialString string
var s string = "source regular string"
var ss SpecialString
// Get the reflect.Value of the thing &ss pointing at.
ssv := reflect.ValueOf(&ss).Elem() 
// You need to convert string to SpecialString explicitly
ssv.Set(reflect.ValueOf(s).Convert(ssv.Type())) 
fmt.Printf("ss = %T %+#v\n", ss, ss)

https://play.golang.org/p/OtFuS5bAaax

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