Шта је рефлексија у Голангу

Sta Je Refleksija U Golangu



Рефлецтион ин Голанг омогућава програму да испита и модификује структуре података, типове и вредности у току рада. Обезбеђује скуп функција које нам омогућавају да испитамо тип и вредност било које променљиве током времена извршавања, креирамо нове инстанце типова и изменимо вредност постојећих променљивих. Овај чланак покрива различите функције Голанга у пакету рефлексије.

Преглед садржаја

Го је статички откуцани језик тако да тип променљиве мора бити познат у време компајлирања. Међутим, у одређеним сценаријима, можда ће бити потребно руковати вредностима чији се типови не могу одредити док се програм не изврши.







На пример, можда ћемо морати да напишемо функцију која може да ради са различитим типовима аргумената, или ћемо можда морати да серијализује и десериализујемо податке непознатих типова. Овде се користи рефлектујући пакет у Голангу.



Рефлецт Пацкаге у Го

Пакет рефлексија пружа скуп функција које нам омогућавају да прегледамо и манипулишемо вредностима током извршавања, без обзира на њихов тип. Помоћу ових функција можемо добити информације о типу и вредности било које променљиве, креирати нове инстанце типова и модификовати вредност постојећих променљивих.



Пакет рефлексије у Голангу садржи два типа: Тип и вредност. Тип представља тип Го, као што је инт, стринг или прилагођена структура. Вредност представља вредност одређеног типа, као што је 42 или „здраво“.





Пакет рефлексија такође пружа скуп функција које нам омогућавају да добијемо објекте типа и вредности из променљивих. На пример, функција рефлецт.ТипеОф() враћа Типе објекат који представља тип променљиве, док функција рефлецт.ВалуеОф() даје објекат Валуе који показује вредност променљиве.

У следећим одељцима ћемо истражити неке од најчешће коришћених функција у рефлекс пакету.



рефлекс.Цопи() Функција

Функција рефлецт.Цопи() рефлекс пакета се користи за копирање вредности једног пресека у други пресек. Потребна су два параметра, дст и срц, од којих оба морају бити вредности пресека са истим типом елемента. Функција копира вредности из срц пресека у дст пресек и враћа број елемената који су копирани.

Функција рефлецт.Цопи() је приказана у следећем примеру:

пакет главни

увоз (

'фмт'
'одразити'
)
фунц главни () {
срц := [] инт { 1 , 2 , 3 , 4 , 5 }
дст := направити ([] инт , само ( срц ))
н := одразити . Копирај ( одразити . Вредност ( дст ), одразити . Вредност ( срц ))
фмт . Принтлн ( н ) // Излаз: 5
фмт . Принтлн ( дст ) // Излаз: [1 2 3 4 5]


}

У овом примеру креирамо изворни исечак срц са неким целобројним вредностима и одредишни исечак дст са истом дужином као и срц. Затим позивамо рефлецт.Цопи() да копирамо вредности из срц у дст и штампамо број елемената који су копирани (н) и садржај дст пресека.

рефлекс.ДеепЕкуал() Функција

Функцијарефлект.ДеепЕкуал() рефлекс пакета се користи за упоређивање две вредности за једнакост. Ова функција има два улазна параметра а и б, од којих оба могу бити било које вредности било ког типа. Функција враћа тачно ако су а и б дубоко једнаки, што значи да су њихове основне вредности рекурзивно једнаке. У супротном, испада да је лажно.

Следећи пример показује како се користи рефлецт.ДеепЕкуал():

пакет главни

увоз (

'фмт'
'одразити'
)
фунц главни () {
а := [] инт { 1 , 2 , 3 }
б := [] инт { 1 , 2 , 3 }
ако одразити . ДеепЕкуал ( а , б ) {
фмт . Принтлн ( 'а и б су једнаки' )
} друго {
фмт . Принтлн ( 'а и б нису једнаки' )
}


}

У овом примеру креирамо два пресека а и б са истим целобројним вредностима. Затим позивамо рефлекс.ДеепЕкуал() да бисмо упоредили а и б ради једнакости и одштампали резултат.

рефлекс.Сваппер() функција

Функција рефлецт.Сваппер() одразног пакета се користи за враћање функције која може заменити елементе пресека. Потребан је један параметар, в, који мора бити вредност пресека. Функција враћа функцију која узима два целобројна параметра, и и ј, и мења елементе пресека на позицијама и и ј.

Употреба рефлекс.Сваппер() може се демонстрирати кроз следећи пример:

пакет главни

увоз (

'фмт'
'одразити'
)
фунц главни () {
с := [] инт { 1 , 2 , 3 , 4 , 5 }
свап := одразити . Сваппер ( с )
свап ( 1 , 3 )
фмт . Принтлн ( с ) // Излаз: [1 4 3 2 5]


}

У овом примеру, креирали смо исечак под називом с са неким целобројним вредностима. Затим позивамо рефлецт.Сваппер() да добијемо функцију замена која може да мења елементе пресека. Користимо свап да заменимо елементе на позицијама 1 и 3 исечка с и одштампамо резултат.

рефлекс.ТипеОф() Функција

Рефлект.ТипеОф() се користи за добијање типа вредности. Ова функција прихвата један параметар „в“ који може бити било ког типа или вредности. Функција враћа вредност рефлецт.Типе која представља тип вредности.

Употреба рефлекс.ТипеОф() може се демонстрирати кроз следећи пример:

пакет главни

увоз (

'фмт'
'одразити'
)
фунц главни () {
био Икс флоат64 = 3 . 14
т := одразити . Тип ( Икс )
фмт . Принтлн ( т ) // Излаз: флоат64


}

У овом примеру креирамо флоат64 променљиву к са вредношћу 3.14. Затим позивамо рефлецт.ТипеОф() да добијемо тип к и ускладиштимо резултат у променљивој рефлекс.Типе т. Штампамо вредност т, која је флоат64.

рефлекс.ВалуеОф() Функција

Рефлект.ВалуеОф() може да добије репрезентацију вредности рефлекс.Валуе. Потребан је један параметар в, који може бити било која вредност било ког типа. Функција враћа вредност рефлецт.Валуе која представља вредност улазног параметра.

Употреба рефлекс.ВалуеОф() може се демонстрирати кроз следећи пример:

пакет главни

увоз (

'фмт'
'одразити'
)
фунц главни () {
био Икс флоат64 = 3 . 14
ин := одразити . Вредност ( Икс )
фмт . Принтлн ( ин ) // Излаз: 3.14

}

У овом примеру креирамо флоат64 променљиву к са вредношћу 3.14. Затим позивамо рефлекс.ВалуеОф() да добијемо приказ вредности одраза за к и сачувамо резултат у променљивој вредности рефлексије в. Штампамо вредност в, која је 3,14.

Рефлект пакет пружа бројне функције осим поменутих, а ово је само неколико примера. Коришћењем функција које пружа рефлекс пакет, можемо да креирамо код који може да ради са вредностима било ког типа, без потребе да знамо тип у време компилације.

Закључак

Рефлецтион ин Голанг омогућава програму да испита и модификује структуре података, типове и вредности у току рада. Имплементира се кроз рефлекс пакет, који пружа функције за инспекцију и манипулацију типовима и вриједностима. Рефлексија је посебно корисна када радите са интерфејсима, непознатим типовима или када треба да имплементирате генеричке функције. У овом чланку се расправљало о основама рефлексије у Голангу, укључујући пакет рефлексије, одраз типа и вредности и динамички тип и вредност.