Chcę przekazać struct's wskaźnik do funkcji, które oczekują interfejsu {}. Następnie przenieś (przez odbicie) wskaźnik na element struktury, a następnie zmodyfikuj go za pomocą tego wskaźnika. Dużo czytałem w Q & A i wypróbowałem wiele wariantów, ale wciąż mogę to zrobić.Jak uzyskać wskaźnik elementu struct z interfejsu {} (odbicie). Golang
Rozważmy przykład poniżej:
type Robot struct {
Id int
}
f := func(i interface {}) {
v := reflect.ValueOf(i).Elem().FieldByName("Id")
ptr := v.Addr().Pointer()
*ptr = 100
//^ it needs to me for functions expecting the pointer: Scan(&pointerToValue)
}
robot := &Robot{}
f(robot)
println(robot.Id) //I want to get here 100
Myślę, że problem w złym zrozumieniu co faktycznie Addr() i Pointer() metody odzwierciedlają pakiet ..
Big dziękuję. Mój mózg jest przeciążony, próbuję to sprawdzić jutro! Myślę, że potrzebuję czasu i praktyki, żeby naprawdę zrozumieć, co tu się dzieje. Zwłaszcza tutaj! 'v.Addr(). Interfejs(). (* int)'. Czy mógłbyś podzielić się tym, gdzie mogę zdobyć tego rodzaju wiedzę?) –
@TimurFayzrakhmanov I zaktualizowałem odpowiedź z podziałem wyrażenia "v.Addr(). Interface(). (* Int)'. –
v.Addr(). Interfejs() działa doskonale dla działań DB. Bardzo ci za to dziękuję! – WhiteAngel