Как использовать отражение задать значение поля клиента в go? - PullRequest
0 голосов
/ 02 марта 2020

Есть ли способ использовать отражение для установки значения поля клиента. Мой код ниже.

type Credential{
Client *credentialClient
}

// Reflection
s := &Credential{}
a := reflect.ValueOf(s)
a = a.Elem()

// get the client field I want to set
client := a.FieldByName("Client")

// c is the value I want to set to client
c := newCredentialClient(&result{})

// Here I want to set client value as c.
// But got error: cannot use c (variable of type *credentialClient) as reflect.Value value in argument to // client.Set
client.Set(c)

Есть ли способ установить значение этого клиента, как я ожидал? И я могу убедиться, что этот клиент может быть установлен, так как client.canSet() значение истинно.

1 Ответ

1 голос
/ 02 марта 2020

Как сказал ваш компилятор, вы не можете использовать c (переменная типа *credentialClient), когда вашей функции требуется переменная типа reflect.Value

Вызов ValueOf () возвращает значение, представляющее данные времени выполнения.

Итак, ваш код должен быть таким:

type Credential{
Client *credentialClient
}

// Reflection
s := &Credential{}
a := reflect.ValueOf(s)
a = a.Elem()

// get the client filed I want to set
client := a.FieldByName("Client")

// c is the value I want to set to client
c := newCredentialClient(&result{})

// Here I want to set client value as c.
client.Set(reflect.ValueOf(c))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...