с грубым временем работы с полями структуры с использованием пакета reflect
. в частности, не выяснили, как установить значение поля.
type t struct { fi int; fs string } var r t = t{ 123, "jblow" } var i64 int64 = 456
-
Получение имени поля я - это, похоже, работает
var field = reflect.TypeOf(r).Field(i).Name
-
получение значения поля я как a) интерфейса {}, b) int - это, похоже, работает
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()
var i int = int(reflect.ValueOf(r).Field(i).Int())
-
значение настройки поля я - попробуйте один - панику
reflect.ValueOf(r).Field(i).SetInt( i64 )
panic: reflect.Value · SetInt, используя значение, полученное с использованием нераспределенного поля
при условии, что ему не нравятся имена полей "id" и "name", поэтому они переименованы в "Id" и "Name"
a) верно ли это предположение?
b) если это правильно, считайте нужным, поскольку в том же файле/пакете
-
значение настройки поля я - попробуйте два (с именами полей заглавные) - panic
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
panic: reflect.Value · SetInt с использованием неадресаемого значения
Инструкции, приведенные @peterSO, являются тщательным и качественным
Четыре. это работает:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
он также документирует, что имена полей должны быть экспортируемыми (начинаются с заглавной буквы)