@jakayla
Рефлексия - это механизм в языке программирования Go, который позволяет программе исследовать типы данных и переменные во время выполнения.
Вот несколько примеров использования рефлексии в Go:
1 2 |
var x int = 10 fmt.Println(reflect.TypeOf(x)) |
Этот код выведет тип переменной "x", который в данном случае будет "int".
1 2 |
var x int = 10 fmt.Println(reflect.ValueOf(x).Int()) |
Этот код выведет значение переменной "x", которое в данном случае будет "10".
1 2 3 4 |
var x int = 10 v := reflect.ValueOf(&x) v.Elem().SetInt(20) fmt.Println(x) |
Этот код изменит значение переменной "x" на "20".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
type MyStruct struct { Name string Age int } func (s MyStruct) SayHello() { fmt.Println("Hello") } func main() { t := reflect.TypeOf(MyStruct{}) for i := 0; i < t.NumMethod(); i++ { m := t.Method(i) fmt.Println(m.Name) } } |
Этот код выведет список методов, которые доступны для типа "MyStruct", включая метод "SayHello".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
func New(name string) (interface{}, error) { t, err := getStruct(name) if err != nil { return nil, err } return reflect.New(t).Elem().Interface(), nil } type MyStruct struct { Name string Age int } func main() { s, _ := New("MyStruct").(*MyStruct) s.Name = "John" s.Age = 30 fmt.Println(s) } func getStruct(name string) (reflect.Type, error) { // ... } |
Этот код создаст новый экземпляр структуры "MyStruct" и заполнит его поля значениями "John" и "30".